鱼C论坛

 找回密码
 立即注册
查看: 1397|回复: 5

[已解决]C语言递归中使用--n的探讨

[复制链接]
发表于 2020-10-28 09:00:20 | 显示全部楼层    本楼为最佳答案   
return n*fac(--n);   

这么写的话是先计算 --n ,这时候n已经变成了 n-1 然后再计算 (n-1)*fac(n-1),
这个结果显然是不对的。
做个简单的测试,比如说
fac(5) 算出来答案是 24,实际上 5!=120。

另外,阶乘和指数运算很容易就超过了 int 的大小,最好是用double 类型。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-28 09:37:40 | 显示全部楼层
取什么名字好… 发表于 2020-10-28 09:22
我简化了一下,就是求阶层的步骤出了问题,但是我变成以下的代码就没问题,就是把类型名换成long  long ...


32位系统下 long 最大值为 2的31次方减1,
这个数为   2147483647
13! =      6227020800
13的阶乘就已经超出了最大的 long
你的循环里要算到20的阶乘,显然是算不出来的,long long 的最大值为 2 的63次方减1,
这个数为 9223372036854775807
20!  =  2432902008176640000
刚好可以满足,21就又不行了。
所以我建议你用double,double 的最大值可以到10的308次方。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-28 04:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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