【发布时间】:2010-04-17 16:22:49
【问题描述】:
请帮帮我。该程序应该递归地找出两个数字的组合。 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);
}
【问题讨论】:
-
使用帕斯卡三角形要好得多,也更容易。
-
你为什么要使用浮点数? int 已经足够好了:)
-
我试图为 nCr 编写一个递归函数。在这种特殊情况下,int 对于除法精度来说不够好。
标签: c recursion segmentation-fault