完整的代码如下:
#include <stdio.h>
int Tran(int r, int c)
{
return(c==1||c==r)?1:Tran(r-1,c-1)+Tran(r-1,c);
}
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=1; i<=n;i++)
{
for(j=1;j<=i;j++){printf("%5d",Tran(i,j));}
printf("\n");
}
return 0;
}
下面解释一下这个递归的自定义函数
int Tran(int r, int c)
{
return(c==1||c==r)?1:Tran(r-1,c-1)+Tran(r-1,c);
}
当你是输入2的时候,外面的for循环指的是打印多少行,里面的for循环里面的j会出现两个值:1和2。当j=2的时候,就是Tran(2,2);这时候进入那个自定义函数r=c,return返回1,所以打印1;然而每次j都会从1开始,所以每行的第一个都是1;
下面的代码升级,当你每按一次空格或者输入非1的数就会打印一行代码,输入1的时候结束打印
#include<iostream>
int Tran(int r, int c)
{
return(c==1||c==r)?1:Tran(r-1,c-1)+Tran(r-1,c);
}
using namespace std;
int main(){
int num = 0,j;
char c;
int yang[2]={1,1};
while((c=getchar()) != '1')
{
num++;
for(j=1;j<=num;j++){printf("%10d",Tran(num,j));}
printf("\n");
}
system("pause");
}