鱼C论坛

 找回密码
 立即注册
查看: 4049|回复: 13

阶乘递归!!!

[复制链接]
发表于 2011-11-16 18:24:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. # include <stdio.h>

  2. double f (int n);

  3. void main()

  4. {   
  5.     double sum;
  6.     int n = 5;

  7.     sum = f(n);
  8.    
  9.     printf("%lf\n", sum);
  10. }

  11. double f (int n)

  12. {
  13.     double result;

  14.     result = f(n - 1) * n;

  15.     return result;
  16. }
复制代码


为什么这个递归阶乘不行呢!



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-16 19:09:17 | 显示全部楼层
如何结束递归?
一直在调用。。没有返回条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-16 19:22:01 | 显示全部楼层
  1. int f(int n) {
  2.   return n==0 ? 1: n*f(n-1);
  3. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-17 17:47:39 | 显示全部楼层
哎,还是不知道怎么运用递归!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-17 20:21:09 | 显示全部楼层
掌握递归需要数学归纳法的基础,而且需要一定的时间来琢磨。。。接下来就等待某个“顿悟”的时刻。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-17 21:23:48 | 显示全部楼层
什么是数学归纳法呵呵
我才初中毕业!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-19 21:42:51 | 显示全部楼层
本帖最后由 宇智波曌 于 2011-11-19 21:43 编辑
  1. # include <stdio.h>

  2. double f (int n);

  3. void main()

  4. {   
  5.     double sum;
  6.     int n = 5;

  7.     sum = f(n);
  8.    
  9.     printf("%lf\n", sum);
  10. }

  11. double f (int n)//其实定义成int就行了,不需要double

  12. {
  13.     //double result;
  14.         if(n == 1)        //递归的出口条件,这点很重要
  15.                 return 1;
  16.         else
  17.         //        result = f(n - 1) * n;

  18.     return f(n - 1) * n;
  19. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-11-20 14:33:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-20 16:42:00 | 显示全部楼层
谢谢大家啊!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-22 14:54:13 | 显示全部楼层
来逛下:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-22 15:26:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-22 16:01:31 | 显示全部楼层
sinner 发表于 2011-11-22 15:26
代码应该是这样吧
return n==1 ? 1:n*f(n-1);
到n==1的时候就开始返回1了。

0!=1!=1.
您这样写也是对的,但是该函数就不能计算0!了,所以适用范围不如我写的广。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-25 09:30:16 | 显示全部楼层
仰望天上的光 发表于 2011-11-22 16:01
0!=1!=1.
您这样写也是对的,但是该函数就不能计算0!了,所以适用范围不如我写的广。

哦,原来如此,受教了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-24 20:43:39 | 显示全部楼层
本帖最后由 pediyzhi 于 2012-9-24 20:58 编辑
  1. int f(int n) {

  2. return n?n*f(n-1):1;

  3. }
复制代码

再精简下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-28 09:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表