【发布时间】:2021-09-27 21:08:20
【问题描述】:
我正在为 C 中的作业编写一些代码而苦苦挣扎。我必须递归地计算一个加泰罗尼亚数。 给出以下公式: Formula IMG.
遮阳篷应该是:
0 > 1(填0应该打印1)
5 > 42(填5应该打印42)
7 > 429(填7应该打印429)
9 > 4862(填9应该打印4862)
10 > 16796(填10应该打印16796)
请看一下:
#pragma warning(disable : 4996)
#include <stdio.h>
int catalanRecursief(int n) {
if (n == 0){
return 1;
} else {
return (2 * ((2 * n) - 1)) / (n + 1) * (catalanRecursief(n - 1));
}
}
int main(void){
int n;
printf("Catalan printer\n\n");
printf("What catalan number do you want to calculate? ");
scanf("%d", &n);
/*catalanRecursief(n);*/
printf("Catalan number: %d > %d", n, catalanRecursief(n));
getchar();
return(0);
}
【问题讨论】:
-
整数除法会截断小数部分。将公式中的一个数字更改为浮点数。
return (2. * ((2 * n) - 1)) / (n + 1) * (catalanRecursief(n - 1));之类的东西(注意前 2 的小数位) -
更好的是:在任何除法之前进行所有乘法运算 -
return (2 * ((2 * n) - 1)) * (catalanRecursief(n - 1)) / (n + 1)