请帮我解决这个问题。该程序应该递归地找出两个数字的组合。 nCr = n!/(r!(n-r)!)。当我在GCC上编译它时,我收到此错误消息。
输入两个数字: 8 4 分段错误
(程序退出代码:139)
代码在这里给出:
#include<stdio.h>
float nCr(float, float, float);
int main()
{
float a, b, c;
printf("Enter two numbers: \n");
scanf("%f%f", &a, &b);
c = nCr(a, b, a-b);
printf("\n%.3f", c);
return 0;
}
float nCr(float n, float r, float p)
{
if(n<1)
return (1/(p*r))*(nCr(1, r-1, p-1));
if(r<1)
return (n/(p*1))*(nCr(n-1, 1, p-1));
if(p<1)
return (n/r)*(nCr(n-1, r-1, 1));
return ( n/(p*r) )*nCr(n-1, r-1, p-1);
}
答案 0 :(得分:4)
由于nCr没有任何非递归的return语句,因此它将无限递归。由于这会导致堆栈无限增长,因此会出现分段错误。
基本上,递归函数应始终至少有一条可能的路径通过函数,而不会递归。否则你会有无限递归。
答案 1 :(得分:3)
答案 2 :(得分:1)
你肯定会陷入无限递归以获得此分段错误。你本质上没有基本情况来停止递归,如sepp2k所述。
答案 3 :(得分:0)
您是否尝试过调试崩溃?您可以使用this page作为参考。如果您可以发布有关崩溃的信息(堆栈跟踪等),这将有助于您和SO社区解决问题。