递归需要有结束递归的出口,否则会造成无限制递归使栈内空间溢出。
本题中:当m=n或n=0时,C(n,m)=1;否则,C(n,m)=m/(m—n)*C(n,m-1)
用递归函数f表示为
if(n==0||m==n) return 1;
if(n==1) return m;
else return m*f(n,m-1)/(m-n);
完整的函数:
#include<stdio.h>
int f(int n,int m)
{
int p;
if(n==0||m==n) return 1;
if(n==1) return m;
else return m*f(n,m-1)/(m-n);
}
int main()
{
int a,b;
printf("输入自然数a,b(保证b>=a):");
scanf("%d,%d",&a,&b);
printf("C(%d,%d)=%d\n",a,b,f(a,b));
return 0;
}