gpt4 book ai didi

c - C中的二项式系数递归解

转载 作者:太空宇宙 更新时间:2023-11-04 08:06:55 25 4
gpt4 key购买 nike

为什么我的二项式系数解法会崩溃?我真的尝试过学习递归,但我仍然认为我对此不清楚。不知有没有人能帮我学习一下递归,如何递归思考?

即使我写了一个很好的基本案例,我的程序也会崩溃。任何通过清晰的演示来学习递归的链接都会对我很有帮助。

这是我的二项式系数代码,我找不到错误/错误,正在寻求您的帮助。

代码:

#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;
}

最佳答案

n >= k 时,二项式系数仅针对 nk 对定义。通常在二项式系数表达式中使用 nk,但它们对应于您的 nm代码。

您需要对输入进行一些错误检查以避免出现问题。当 n 小于 m 时,您的代码会崩溃,因为每次执行语句 o=binomial(n-1,m); 时,被调用函数中n的值减少了,但是n已经小于m,它是非零的(如果m 为零函数将简单地返回 1),因此 n == m 永远不会发生。

顺便说一下,您可以通过几种方式改进您的代码。使用全局变量通常不是一个好主意,最好移动声明:

long long m, n, result;

进入 main(),其中需要这些变量。此外,main() 的函数签名应为 int main(void)。您可以大大加强 binomial() 函数中的逻辑,从而消除对 op 的需要:

long long binomial(long long  n,long long m)
{
if (m != 0 && n != m) {
return binomial(n-1, m) + binomial(n-1, m-1);
} else {
return 1;
}
}

关于c - C中的二项式系数递归解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42228333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com