杨辉三角形的输出(递归算法)

1、问题描述
杨辉三角形
输出以下的杨辉三角形(要求输出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
……………………

2、我对这问题的看法
在我看来,本题考察的主要是组合数的计算,即 C n k C_n^k 的计算,具体的计算方法下面会详细的介绍。在计算完组合数后,对组合数进行输出操作即可。

3、解法思想
(1)首先,写实现求组合数的函数comm(),具体的代码思想和代码在下面有详细说明;
(2)接着,写输出函数output(),在函数里通过两个for循环控制输出的行数以及每行输出的个数;大for循环控制输出的行数,小for循环控制每行输出的个数(在这个for循环中调用comm()函数,具体的调用形式为comm(i,j),即求 C n k C_n^k );
(3)最后,写主函数main(),在main函数中调用output函数即可;

4、组合数 C n k C_n^k 的计算
计算公式: C n k C_n^k = C n 1 k C_{n-1}^{k} + C n 1 k 1 C_{n-1}^{k-1}
由上述的公式不难看出, C n k C_n^k 的值可以通过 C n 1 k C_{n-1}^{k} C n 1 k 1 C_{n-1}^{k-1} 的和表示,故可以通过递归的方法,不断地递推,最终得到 C n k C_n^k 的值。

具体的实现代码(递归算法

int comm(int n,int k)     //计算组合数
{
	if(k>n) return 0;          //若k>n,报错; 
	else if(k==n||k==0) return 1;  //若k=n或k=0,返回1,即函数结束; 
	else return comm(n-1,k)+comm(n-1,k-1);  //开始递归; 
} 

代码运行截图
计算 C 4 2 C_4^2 为例:
在这里插入图片描述
5、完整解法代码

#include<iostream>
using namespace std;

int comm(int n,int k)     //计算组合数; 
{
	if(k>n) return 0;          //若k>n,报错; 
	else if(k==n||k==0) return 1;  //若k=n或k=0,返回1,即函数结束; 
	else return comm(n-1,k)+comm(n-1,k-1);  //开始递归; 
} 

void output(int lineNumber)        //定义输出函数output(),并定义存放输出行数的变量lineNumber; 
{
	for(int i=0;i<lineNumber;i++)   //变量i控制输出的行数; 
	{
		for(int j=0;j<=i;j++)      //变量j控制每行输出的个数; 
		{
			cout<<comm(i,j)<<" ";  //调用函数comm(); 
		}
		if(i!=lineNumber-1)          //保证最后一行不换行; 
		{
			cout<<endl;                //一行输出结束后换行; 
		}  
	}	
} 

int main()
{
	output(10);
	return 0;
}

6、运行截图
输出10行:
在这里插入图片描述
至此,整个题目解答完毕!!!

结语:以上就是我对这个问题的理解、解法,可能存在着更好、更简洁的解法代码,希望大家提出来,我们一起讨论,交换看法,共同进步。若上述代码中存在问题,望大家指正,谢谢大家看到结尾。(∩^∩)

奋斗的2351

发布了12 篇原创文章 · 获赞 3 · 访问量 391

猜你喜欢

转载自blog.csdn.net/weixin_45620022/article/details/104874412
今日推荐