c++写杨辉三角

来源:互联网 发布:福州广电网络电视电话 编辑:程序博客网 时间:2024/06/14 18:42

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

        因为自己是刚刚转入了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,上面所说。一般用于数列,而且一定得有储存。

0 0
原创粉丝点击