【发布时间】:2017-02-17 01:41:27
【问题描述】:
为什么我的二项式系数解决方案会崩溃?我真的尝试过学习递归,但我仍然认为我不清楚。我想知道是否有人可以帮助我了解递归以及如何递归思考?
即使我编写了一个好的基本案例,我的程序也会崩溃。任何学习递归的链接都对我很有帮助。
这是我的二项式系数代码,我找不到错误/错误,寻求您的帮助。
代码:
#include<stdio.h>
long long m,n,o,p,result;
long long binomial(long long n,long long m)
{
if(n==m)
return 1;
else {
if(m==0)
return 1;
else {
o=binomial(n-1,m);
p=binomial(n-1,m-1);
return o+p;
}
}
}
int main()
{
printf("Please Enter The Value Of n:\n");
scanf("%lld",&n);
printf("Now Enter The value of m:\n");
scanf("%lld",&m);
result = binomial(n,m);
printf("Resultant Binomial coefficient: %lld\n",result);
return 0;
}
【问题讨论】:
-
在这部分:m=binomial(n-1,m); n=二项式(n-1,m-1);您不能用新结果替换您的 m 值,因为您需要第二个二项式调用的原始 m 值。
-
@David Hoelzer 感谢您的帮助,但现在我已经对我的代码进行了更改,请您看看为什么它仍然无法正常工作?这是代码:
-
#include
long long m,n,result,o,p; long long binomial(long long n,long long m) { if(n==m)return 1; else{ if(m==0)return 1; else{ o=二项式(n-1,m); p=二项式(n-1,m-1);返回 o+p; } } } int main() { printf("请输入 n 的值:\n"); scanf("%lld",&n); printf("现在输入 m 的值:\n"); scanf("%lld",&m);结果=二项式(n,m); printf("结果二项式系数:%lld\n",result);返回0; } -
你使用 n 和 m 的什么值?请注意,由于您测试
n == m,如果您有n < m,您的第一个二项式o=binomial(n-1,m);将永远不会退出,但会不断递归。你应该检查这不会发生。 -
是的,当 n 小于 m 时,例如对于 2 和 5 输入,我的程序崩溃,我明白你只是因为我的基本情况检查 n==m,然后如果 n 小于 m意味着我的程序将继续递归调用,直到堆栈溢出,但是我已经尝试过这个,这个链接:@ 987654321@ 请检查它。在那个链接中,算法与我在我的程序中写的一样吗?请问有什么办法可以解决这个问题吗?谢谢
标签: c recursion binomial-coefficients