我被困在这里。对于n = 5
和k = 3
,答案应为19
。如果我将k = 3
分别设置为本地变量或全局变量并运行wabbits(5)
,我会得到19,但是当我在下面的函数之后运行wabbits(5, 3)
时,我得到了
TypeError: wabbits() missing 1 required positional argument: 'k'
我做错了什么?
def wabbits(n, k):
if n == 1:
return 1
if n == 2:
return 1
return wabbits(n-2)*k + wabbits(n-1)
答案 0 :(得分:4)
您的wabbits()
函数需要两个参数:
def wabbits(n, k):
# 1 2
但你的代码只用一个来调用它:
return wabbits(n-2)*k + wabbits(n-1)
# ^^^ ^^^^
您还需要传入k
的值。您只需传入k
的当前值:
def wabbits(n, k):
if n == 1:
return 1
if n == 2:
return 1
return wabbits(n-2, k)*k + wabbits(n-1, k)
# 1 2 1 2
确实产生了19:
>>> def wabbits(n, k):
... if n == 1:
... return 1
... if n == 2:
... return 1
... return wabbits(n-2, k)*k + wabbits(n-1, k)
...
>>> wabbits(5, 3)
19
答案 1 :(得分:0)
使用wabbits(5)
调用该函数将不起作用,因为该函数被声明为接受 2 参数:n
和k
。两者都必须提供。
您可以使用两个参数调用该函数,但问题是对wabbits()
的递归调用只传递一个参数:
wabbits(n-2) * k + wabbits(n-1)
这是对wabbits()
的两次调用,第一次有一个参数n-2
,第二次只有一个参数n-1
。由于必须使用两个参数调用wabbits()
,因此会引发TypeError`异常。
答案 2 :(得分:0)
几种解决方案,最简单的是:
def wabbits(n, k):
if n == 1:
return 1
elif n == 2:
return 1
return wabbits(n-2, k)*k + wabbits(n-1, k)
r = wabbits(5, 3)
但是你可以使用内部函数封装k
:
def wabbits(n, k):
def bunnies(rn):
if rn == 1:
return 1
elif rn == 2:
return 1
return bunnies(rn-2)*k + bunnies(rn-1)
return bunnies(n)
r = wabbits(5, 3)