无需0值判断的Python新阶乘函数实现技术求助
解决阶乘实现的递归问题
哈哈,这个数学思路挺巧妙的!不过你遇到的问题其实是递归方向搞反了——直接用 n! = (n+1)! / (n+1) 写递归的话,会陷入无限调用的死循环,因为没有终止条件呀!
你想哦,计算0!的时候,按照公式要算1!/1;算1!又要算2!/2;算2!要算3!/3……这样一直往更大的数去递归,永远停不下来,Python的递归栈很快就会溢出报错。
方案1:迭代实现(无需单独处理0!分支)
如果想避开单独写n==0的分支,其实用迭代实现会很自然:
def factorial(n): result = 1 for i in range(1, n+1): result *= i return result
当n=0时,range(1, 0+1)是空序列,循环根本不会执行,result保持初始值1,正好就是0!的结果,完美符合你的需求~
方案2:改进递归实现(合并终止条件)
如果坚持想用递归的话,其实可以把终止条件设为n <= 1时返回1,这样0!和1!都被包含进去了,也不用单独写分支:
def factorial(n): if n <= 1: return 1 return factorial(n-1) * n
这个逻辑和你那个数学公式其实是等价的,只不过是反向推导:从n往1递推,而不是往更大的数去延伸,这样就有了明确的终止点。
其实0!本身是数学上的定义(为了让组合数等公式成立),你的推导是对的,但用它来做递归的话方向不对,必须要有一个能停下来的终止条件才行~
内容的提问来源于stack exchange,提问作者user9404562
相关产品推荐
相关产品推荐

