c++写杨辉三角

先说一下为什么我要写这个比较简单的程序吧。

        因为自己是刚刚转入了c++语言的学习,而且自己习惯了,学了一点有用的东西之后,有博客来记录。最重要的一点是,自己现在也开始弄linux系统,有很多的东西都是非常的痛苦和陌生,起初我的两个递归和递推版本的杨辉三角都是在ubuntu的系统上面写的,用vim来编写,可是难度真的不是一般的大····,首先就是自己不熟悉vim其次,在ubuntu上面运行c++程序也是用命令行来操作的,非常的不方便,而且在ubuntu上面打中文也不是很那么的智能的。哎,说多了都是泪啊。

——————————————————————————————————————————————————————————————————————————————————

正题。

杨辉三角其实是程序设计基础的必要的程序,之前都是看了半懂半不懂得感觉,所以今天我就自己动手来干。

其实很简单就利用了一个公式:c(m,n)=c(m-1,n-1)+c(m,n-1);这个是自由组合的公式,自己百度哈哈。

下面就是代码展示。

(一)这个是递推版本的。

#include <iostream>
#include <vector>//很明显,我这里用的是容器而不是二维的数组,因为我觉得如果用二维的数组的话会有很大的浪费。
using namespace std;
void chushihua(int n,vector<int> (&c)[100]);//这里引用类型利用真的是大费周章了啊,原本我是没有那个100的突然发现,这个是引用来的,
//如果没有这个100的话,那么这引用和它所引用的类型的大小岂不是不一样的,多么痛的领悟啊。
int main()
{
	int n;
	cout<<"please input a number n"<<endl;
	cin>>n;
	vector<int> s[100];
	chushihua(n,s);
	return 0;

}
void chushihua(int n,vector<int> (&c)[100])
{
	
	for(int i=0;i<n;i++)
		{
		for(int j=0;j<i+1;j++)
		{
			if((j==0)||(j==i))
				c[i].push_back(1);
			else{
					c[i].push_back(c[i-1][j]+c[i-1][j-1]);
				}
			cout<<c[i][j]<<" ";
		}
		cout<<endl;
	}
}

(二)递归版本

#include <iostream>
#include <vector>
using namespace std;
int c(int n,int m);
int main()
{
	vector<int> s[100];
	int n;
	cout<<"please input a number n that mean how many lines that traiangle will be"<<endl;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<i+1;j++)
		{
			s[i].push_back(c(i,j));

		}
	}
	for(int i=0;i<n;i++)
		{
		  	for(int j=0;j<i+1;j++)
		
				cout<<s[i][j]<<" ";
			cout<<endl; 
		} 
}
int c(int a,int b)
{
	if(b==0)
		return 1;
	else if (b==a)
		return 1;
	else 
	{
		return c(a-1,b-1)+c(a-1,b);
	}
	

}

其实这个版本的都是差不多的。不过运用的思想不是很一样。既然这样就说一下自己对于递归和递推的理解吧。


递归:

1,针对于一个函数自己调用自己的函数类型,这个往往是非常简洁的。当递归来用解决那种数列类型的时候,往往就能写成递推的行,就是根据第一个然后推出以下后面的n项来的,很强

递推:

1,上面所说。一般用于数列,而且一定得有储存。

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/qq_34786412/article/details/52658713
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞