在 C 中计算加泰罗尼亚数
Calculating a catalan number in C
我正在努力处理一些我必须为 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);
}
把单位从n改成float就可以解决了
int catalanRecursief(float n) {
if (n == 0) {
return 1;
} else {
return ((2 * ((2 * n) - 1)) / (n + 1)) * (catalanRecursief(n - 1));
}
}
或
int catalanRecursief(int n) {
if (n == 0) {
return 1;
} else {
return ((2.0 * ((2 * n) - 1)) / (n + 1)) * (catalanRecursief(n - 1));
}
}
这是因为除以整数 c 会截断它们
正如 theory 所说的加泰罗尼亚数字是整数,您应该确保除法最后发生以避免整数除法截断:
...
else {
return (2 * ((2 * n) - 1)) * (catalanRecursief(n - 1)) / (n + 1);
}
...
对于 32 位整数,预计会从 C17 开始溢出,因此如果您想更进一步,请使用 long long
...
我正在努力处理一些我必须为 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);
}
把单位从n改成float就可以解决了
int catalanRecursief(float n) {
if (n == 0) {
return 1;
} else {
return ((2 * ((2 * n) - 1)) / (n + 1)) * (catalanRecursief(n - 1));
}
}
或
int catalanRecursief(int n) {
if (n == 0) {
return 1;
} else {
return ((2.0 * ((2 * n) - 1)) / (n + 1)) * (catalanRecursief(n - 1));
}
}
这是因为除以整数 c 会截断它们
正如 theory 所说的加泰罗尼亚数字是整数,您应该确保除法最后发生以避免整数除法截断:
...
else {
return (2 * ((2 * n) - 1)) * (catalanRecursief(n - 1)) / (n + 1);
}
...
对于 32 位整数,预计会从 C17 开始溢出,因此如果您想更进一步,请使用 long long
...