[C.C++] c语言编写一个递归函数f,计算组合C(n,m)

617 0
Honkers 2025-3-21 14:17:15 | 显示全部楼层 |阅读模式

递归需要有结束递归的出口,否则会造成无限制递归使栈内空间溢出。

本题中:当m=n或n=0时,C(n,m)=1;否则,C(n,m)=m/(m—n)*C(n,m-1)

用递归函数f表示为

  1. if(n==0||m==n) return 1;
  2. if(n==1) return m;
  3. else return m*f(n,m-1)/(m-n);
复制代码

完整的函数:

  1. #include<stdio.h>
  2. int f(int n,int m)
  3. {
  4. int p;
  5. if(n==0||m==n) return 1;
  6. if(n==1) return m;
  7. else return m*f(n,m-1)/(m-n);
  8. }
  9. int main()
  10. {
  11. int a,b;
  12. printf("输入自然数a,b(保证b>=a):");
  13. scanf("%d,%d",&a,&b);
  14. printf("C(%d,%d)=%d\n",a,b,f(a,b));
  15. return 0;
  16. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行