递归需要有结束递归的出口,否则会造成无限制递归使栈内空间溢出。
本题中:当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;
- }
复制代码 |