编写一个程序来打印二项式展开系列

编写一个程序来打印二项式展开系列

二项展开式是一个数学公式,用于展开 (a+b)^n 形式的表达式,其中 n 是正整数,a 和 b 可以是任何实数或复数。展开式给出了展开式中各项的系数。

一个二项式展开可以表示为

$$mathrm{(a+b)^n= ^nC_0a^nb^0+ ^nC_1a^{n-1}b^1 + ^nCa^{n-2}b^2+… + ^nC_ra^{n-r}b^r+…+ ^nC_na^0b^n}$$

其中 $mathrm{^nC_r}$ 是二项式系数,由下式给出

$mathrm{^nC_r=frac{n!}{r!times(n−r)!}}$,其中n!表示n的阶乘

展开式可用于使用上述公式计算所有二项式项并将其代入展开式方程。

问题陈述

给定三个整数 a、b 和 n。求 (a+b)^n 的二项展开式的项。

示例示例1

输入 –

a = 1, b = 2, n = 3

输出 –

[1, 6, 12, 8]

Explanation

的中文翻译为:

解释

二项式展开式(1+2)^3如下所示

$mathrm{(1+2)^3 = C(3,0)a^3b^0 + C(3,1)a^2b^1 + C(3,2)a^1b^2 + C(3,3)a^0b^3}$

= 1*1*1 + 3*1*2 + 3*1*4 + 1*1*8

因此,[1, 6, 12, 8] 是二项式展开的项。

示例例子2

输入 –

a = 7, b = 2, n = 11

输出 –

[2401, 2744, 1176, 224, 16]

方法一:递归二项式展开

使用二项式展开公式,

$$mathrm{(a+b)^n= ^nC_0a^nb^0+ ^nC_1a^{n-1}b^1 + ^nCa^{n-2}b^2+… + ^nC_ra^{n-r}b^r+…+ ^nC_na^0b^n}$$

我们可以通过递归计算二项式系数来找到每一项的值。

伪代码

procedure binomialCoeff (n, r)   if r == 0 or r == n      ans = 1   else      ans = binomialCoeff (n - 1, r - 1) + binomialCoeff (n - 1, r)end procedureprocedure binomialTerms (a, b, n)   Initialize vector: arr   for r = 0 to n      coeff = binomialCoeff(n, r)      term = coeff + a^n-r + b^r      add the term to arr   ans = arrend procedure

示例:C++实现

在下面的程序中,binomialCoeff()函数递归地计算第r个二项式系数的值,而binomialTerms()函数计算展开式中二项式项的值。

#include using namespace std;// Function for calculating binomial coefficientsint binomialCoeff(int n, int r){   if (r == 0 || r == n) {      return 1;   } else {      return binomialCoeff(n - 1, r - 1) + binomialCoeff(n - 1, r);   }}// Function for calculating the binomial termsvector binomialTerms(int a, int b, int n){   vector ans;   for (int r = 0; r <= n; r++) {         // Calculate the rth binomial coefficients      int coeff = binomialCoeff(n, r);            // Calculate the rth binomial expansion term      int term = coeff * pow(a, n - r) * pow(b, r);      ans.push_back(term);   }   return ans;}int main(){   int a = 2, b = 3, n = 4;   vector res = binomialTerms(a, b, n);   cout << "The binomial terms are : ";   for (int i = 0; i < res.size(); i++) {      cout << res[i] << " ";   }   return 0;}

输出

The binomial terms are : 16 96 216 216 81

时间复杂度 – O(2^n),其中由于递归树和 binomialTerms() 中的 2^n 个节点,binomialCoeff() 函数的时间复杂度为 O(2^n)由于嵌套循环调用 binomialCoeff() n+1 次,函数的复杂度为 O(n^2)。因此总体复杂度为 O(2^n)。

空间复杂度 – 由于递归调用栈,空间复杂度为O(n)。

方法 2:迭代二项式展开

使用二项式展开公式,

$$mathrm{(a+b)^n= ^nC_0a^nb^0+ ^nC_1a^{n-1}b^1 + ^nCa^{n-2}b^2+… + ^nC_ra^{n-r}b^r+…+ ^nC_na^0b^n}$$

我们可以通过结合迭代和除法来找到这个展开式的每一项的值。

我们将创建 2 个函数,其中第一个函数计算二项式系数,第二个函数将 a 和 b 的幂相乘以获得所需的二项式项。

伪代码

procedure binomialCoeff (n, r)   res = 1   if r > n - r      r = n - r   end if   for i = 0 to r-1      res = res * (n - i)      res = res / (i + 1)   ans = resend procedureprocedure binomialTerms (a, b, n)   Initialize vector: arr   for r = 0 to n      coeff = binomialCoeff(n, r)      term = coeff + a^n-r + b^r      add the term to arr   ans = arrend procedure

示例:C++实现

在下面的程序中,binomialCoeff() 函数计算第 r 个二项式系数,而 binomialTerms() 函数计算给定 a、b 和 n 的二项式展开的所有项。

#include using namespace std;// Function for calculating binomial coefficientsint binomialCoeff(int n, int r){   int res = 1;   if (r > n - r)  {      r = n - r;   }   for (int i = 0; i < r; i++) {      res *= (n - i);      res /= (i + 1);   }   return res;}// Function for calculating the binomial termsvector binomialTerms(int a, int b, int n){   vector ans;   for (int r = 0; r <= n; r++){         // Calculate the rth binomial coefficients      int coeff = binomialCoeff(n, r);            // Calculate the rth binomial expansion term      int term = coeff * pow(a, n - r) * pow(b, r);      ans.push_back(term);   }   return ans;}int main(){   int a = 2, b = 3, n = 4;   vector res = binomialTerms(a, b, n);   cout << "The binomial terms are : ";   for (int i = 0; i < res.size(); i++){      cout << res[i] << " ";   }   return 0;}

输出

The binomial terms are : 16 96 216 216 81

时间复杂度 – O(n^2),其中 binomialCoeff() 函数的时间复杂度为 O(r),其中 r 是 r 和 n-r 中较小的数字以及 binomialTerms() 函数由于嵌套循环调用 binomialCoeff() n+1 次,复杂度为 O(n^2)。因此总体复杂度为 O(n^2)。

空间复杂度 – 由于向量存储二项式项,所以为O(n)。

结论

总之,要找到二项式展开的二项式项,我们可以使用上述两种方法之一,时间复杂度范围从O(2^n)到O(n^2),其中迭代方法比递归方法更优化。

以上就是编写一个程序来打印二项式展开系列的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:31:20
下一篇 2025年12月17日 22:31:29

相关推荐

  • 打印系列的前N个项(0.25、0.5、0.75,…)的分数表示形式

    输入N,它等于要打印的系列的最大数 Input : N=5Output : 0 ¼ ½ ¾ 1 算法 STARTStep 1 -> declare start variables as int num , den, i, nStep 2 -> i…

    2025年12月17日
    000
  • 从1到N逆序打印质数

    输入数字n,直到计算素数并以倒序显示 Input : number 30Output : 29 23 19 17 13 11 7 5 3 2 算法 STARTStep 1 -> declare variables as n, I, j, flag to 0 as intStep 2 ->…

    2025年12月17日
    000
  • 递归地打印给定的模式

    在这里,根据给定的问题模式,需要使用递归方法来显示。 递归函数是一个调用自身n次的函数。程序中可以有n个递归函数。递归函数的问题在于它们的复杂性。 算法 STARTStep 1 -> function int printpattern(int n) If n>0 Printpattern…

    2025年12月17日
    000
  • C程序打印“偶数”或“奇数”,不使用条件语句

    在本节中,我们将看到如何在不使用任何条件语句(如,>=,==)的情况下检查一个数是奇数还是偶数。 我们可以通过使用条件语句轻松地检查奇数还是偶数。我们可以将数字除以2,然后检查余数是否为0。如果为0,则是偶数。否则,我们可以将数字与1进行AND运算。如果答案为0,则是偶数,否则为奇数。 这里不…

    2025年12月17日
    000
  • 在C程序中,以矩阵对角线模式打印数字

    任务是打印一个 n x n 的对角线模式的矩阵。 如果 n 是 3,那么打印一个对角线模式的矩阵如下: 所以输出将会是: 示例 Input: 3Output: 1 2 4 3 5 7 6 8 9Input: 4Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 1…

    2025年12月17日
    000
  • 在C程序中,进行多个数组范围增量操作后,打印修改后的数组

    给定一个数组 arr[m],其中包含 m 个整数和 n(要添加到数组中的值),并给出 r 个查询,并给出一些开始和结束。对于每个查询,我们必须在数组中添加从开头到限制末尾的值 n。 示例 Input:arr[] = {1, 2, 3, 4, 5}query[] = { { 0, 3 }, { 1, …

    2025年12月17日
    000
  • 在C语言中打印对称的双三角形图案

    给定行数,程序必须以最小的复杂性打印对称双三角形图案。 示例 Input: 5Output: X X O X O X X O X O X X O X O X X 整个问题包含3个不同的分区 − 立即学习“C语言免费学习笔记(深入)”; 对于奇数n,打印上半部分的n-1行,对于偶数n,打印上半部分的n…

    2025年12月17日
    000
  • C语言编写的汉诺塔程序

    汉诺塔是一个数学难题。它由三根杆和若干个不同大小的圆盘组成,这些圆盘可以滑动到任意一根杆上。难题以圆盘按大小升序整齐堆叠在一根杆上开始,最小的圆盘在顶部。我们必须将相同的堆叠移到第三根杆上。 难题的目标是将整个堆叠移动到另一根杆上,遵守以下简单规则− 一次只能移动一个圆盘。 每次移动包括从一根堆中取…

    2025年12月17日
    000
  • 打印n个数字,使它们的和是一个完全平方数

    给定n个数字,程序必须找到这n个数字的和为一个完全平方数 Input : 5Output : 1 3 5 7 91+3+5+7+9=25 i.e (5)^2 算法 START Step 1 : Declare a Macro for size let’s say of 5 and i t…

    2025年12月17日
    000
  • 使用一个循环打印图案的C程序

    挑战是仅使用一个循环和 continue 语句来显示模式。 算法 STARTStep 1 -> declare start variables i and j to 0 with number of rows in n to 6Step 2 -> Loop For i=1 and i&l…

    2025年12月17日
    000
  • C++程序:将一个数组的所有元素复制到另一个数组中

    数组数据结构用于在连续的内存中存储同质数据位置以顺序方式访问它们。数组是线性数据结构,因此数组的基本操作可以在线性时间内执行。在本文中,我们将了解如何在 C++ 中将一个数组中的元素复制到另一个新数组。 由于数组元素是同类的,因此新数组将具有相同的类型。创建后另一个相同大小的数组,我们只需将第一个数…

    2025年12月17日
    000
  • C++程序初始化字典

    C++在同名的字典方面与Python不同,但它具有相似功能的相同数据结构。C++支持映射,可在STL类std::map中使用。映射对象在每个条目中包含一对值,一个是键值,另一个是映射值。键值用于在映射中搜索和唯一标识条目。而映射值不一定是唯一的,键值在映射中必须始终是唯一的。让我们看一下如何使用映射…

    2025年12月17日
    000
  • C程序中的阶乘程序

    Given with the number n the task is to calculate the factorial of a number. Factorial of a number is calculated by multiplying the number with its sma…

    2025年12月17日
    000
  • 在C程序中,打印只包含数字0和1的数,使它们的和为N

    给定一个整数n,任务是打印仅由0和1组成的数字,并且它们的总和等于整数n。 仅包含0和1的数字是1、10 , 11 所以我们必须打印所有可以相加得到等于 n 的数字。 就像,我们输入 n = 31 那么答案可以是 10+10+11 或 10+10 +10+1 示例 Input: 31Output:1…

    2025年12月17日
    000
  • C++程序计算矩阵对角线之和

    The utilization of 2-dimensional arrays or matrices is extremely advantageous for severalapplications. Matrix rows and columns are used to hold number…

    2025年12月17日
    000
  • 打印从1到100的数字的程序,不使用循环

    这里我们将看到如何编写一个 C 程序,可以在不使用任何命令的情况下打印从 1 到 100 的数字一种循环。 这个问题可以使用递归来解决。我们将创建一个函数,该函数将被调用递归地。我们知道,递归函数基本上有两个部分。基本情况和递归调用等操作。在此函数中,基本情况是参数 n 大于 1。直到达到 1 为止…

    2025年12月17日
    000
  • 在C程序中打印给定大小的最大和正方形子矩阵

    给定一个 nxn 的矩阵,找到一个 mxm 的子矩阵,其中 m=1,使得矩阵 mxm 的所有元素之和最大。矩阵 nxn 的输入可以包含零、正整数和负整数值。 示例 Input: {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}, {4, 4, 4,…

    2025年12月17日
    000
  • 在C语言中编写一个打印金字塔图案的程序

    程序说明 金字塔是通过连接多边形底面和称为顶点的点形成的多面体。每个底边和顶点形成一个三角形,称为侧面。它是一个底面为多边形的圆锥体。具有 n 边底的金字塔有 n + 1 个顶点、n + 1 个面和 2n 个边。所有金字塔都是自对偶的。 算法 Accept the number of rows fr…

    2025年12月17日
    000
  • 打印给定数字的乘法表在C中

    程序描述 打印给定数字的乘法表 算法 接受用户提供的任何需要形成乘法的数字 从 I 的值开始乘以给定数 (=1) 将给定数与 I 的值递增,直到 I 值小于或等于12. 示例 /* Program to print the multiplication table of a given number…

    2025年12月17日
    000
  • 编写一个在C语言中打印数字模式的程序

    程序说明 数字模式是根据称为模式规则的规则创建的数字序列。模式规则可以使用一个或多个数学运算来描述序列中连续数字之间的关系。 模式示例 模式 1 12 63 7 104 8 11 135 9 12 14 15 模式 2 1 1 2 3 1 2 3 4 5 1 2 3 4 5 6 71 2 3 4 5…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信