我在骗局上尝试过Marbles pkroblem - (链接:http://www.spoj.com/problems/MARBLES/)
然而,我在多次尝试后遇到运行时错误(SIGSEGV)。
这是我提交的代码 -
#include <stdio.h>
int comb(long int n, long int k)
{
if (n==k || k==0)
return 1;
else
return (comb(n-1, k) + comb(n-1, k-1));
}
int main() {
int t;
long int n, k;
scanf("%d", &t);
while(t--)
{
scanf("%ld %ld", &n, &k);
printf("%d\n", comb(n-1, k-1));
}
return 0;
}
我无法理解为什么我会收到错误。互联网上的其他解决方案都使用迭代方式来计算nCr组合。我尝试过使用递归方法。任何帮助将受到高度赞赏。
答案 0 :(得分:0)
你在递归中递减n
,但是当n
变为0或为负时你不会检查这种情况,所以segfaul基本上告诉你进入无限递归。 / p>
除了n==k || k==0
之外,只需添加一些停止标准。
我没有查看问题描述,所以我不知道正确的条件是什么,但也许你需要像
这样的东西。if (n==k || k==0 || n==0)