用C语言或C++递归函数生成Catalan三角形的数
答案:2 信息版本:手机版
解决时间 2020-05-12 06:09
已解决
2020-05-11 05:53
【问题描述】
Catalan三角形是这样的一个三角形,它的每个元素都是其上面的元素与其左边元素的和。Catalan三角形每一行最后一个元素是前一行元素的和。
【任务要求】
设计递归生成Catalan三角形数的程序,使得输入一个行号n,输出n-1行的Catalan三角形。
【测试数据】
Catalan三角形的前7行为:
1
1 1
1 2 2
1 3 5 5
1 4 9 14 14
1 5 14 28 42 42
1 6 20 48 90 132 132
用C/C++都行,帮忙写一个实现代码
全部回答
1楼
2020-05-11 06:54
#include
#define N 20
void fun(int arr[][N],int r, int c, int n){
int i, d;
if(r==0 && c==0){
arr[r][c]=1;
fun(arr,r+1,0,n);
}else if(c==0){
arr[r][c]=1;
fun(arr,r,c+1,n);
}else if(r==c){
d=0;
for(i=0; i<=r-1; i++)
d+=arr[r-1][i];
arr[r][c]=d;
if(r==n)
return;
else
fun(arr,r+1,0,n);
}else{
arr[r][c]=arr[r][c-1]+arr[r-1][c];
fun(arr,r,c+1,n);
}
}
int main(){
int a[N][N];
int i, j ,n;
printf("n(<20)=?");
scanf("%d",&n);
fun(a,0,0,n-1);
for(i=0; i
for(j=0; j<=i; j++)
printf("%6d",a[i][j]);
printf("\n");
}
return 0;
}
2楼
2020-05-11 06:33
#include
void Catalan(long long *arr1,long long *arr2 ,int n)
{
if (n > 1) Catalan(arr2, arr1, n-1);
*(arr1+1) = *(arr2+1) = 1;
for (int i=1; i <= n+1; i++)
{
*(arr2+i) = *(arr1+i) + *(arr2+i-1);
if ( i <= n) std::cout << *(arr1 + i) << "\t" ;
}
std::cout << std::endl;
}
int main()
{
long long a[50]={0},b[50]={0};
long long *arr1 = &a[0];
long long *arr2 = &b[0];
int n;
std::cout << "please enter a number: ";
while ( !(std::cin >> n) )
{
std::cin.clear();
while (std::cin.get() != '\n' ) { continue; }
std::cout << "bad input! please enter number: ";
}
Catalan(arr1,arr2,n);
return 0;
}
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯