Codechef / SPOJ:'弹珠'运行时错误

时间:2014-06-08 14:34:10

标签: c

我在骗局上尝试过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组合。我尝试过使用递归方法。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

你在递归中递减n,但是当n变为0或为负时你不会检查这种情况,所以segfaul基本上告诉你进入无限递归。 / p>

除了n==k || k==0之外,只需添加一些停止标准。

我没有查看问题描述,所以我不知道正确的条件是什么,但也许你需要像

这样的东西。
if (n==k || k==0 || n==0)