实现双参数Fibonacci测量算法时遇TypeError:缺少参数p
问题原因与解决方法
问题原因
你的递归调用中遗漏了p参数。函数F定义为接收两个位置参数n和p,但在第8行的递归调用F(n-1)和F(n-p-1)里,只传递了一个参数,导致Python提示缺少必需的p参数。
解决方法
修改递归调用,在每次调用F时都传入p参数:
def F(n, p): if n == 0: return 0 elif n <= p+1: return n return F(n-1, p) + F(n-p-1, p) # 补充传递p参数
这样调用F(10,1)时,递归过程中每次都会传递p=1,就不会再触发TypeError了。
额外建议
如果p参数在大多数场景下有固定值,可以给它设置默认值,这样调用时可以省略该参数(但递归时仍需传递):
def F(n, p=1): # 为p设置默认值 if n == 0: return 0 elif n <= p+1: return n return F(n-1, p) + F(n-p-1, p)
此时调用F(10)也能正常工作,无需显式传入p=1。
内容的提问来源于stack exchange,提问作者Mark Nguyen
相关产品推荐
相关产品推荐

