我需要創建一個遞歸函數repeat,它接受一個函數,並使用該函數的n次值與x的值。這裏有一個迭代版本,詳細解釋了我的問題。使用lambda表達式的遞歸函數
def repeat(fn, n, x):
res = x
for i in range(n):
res = fn(res)
print(res)
return res
print(repeat(lambda x: x**2, 3, 3)) returns 6561
首先需要3^2,然後是3^2^2是81話又說回來3^2^2^2 = 6561. 我怎樣才能使這個遞歸,因此它可以像這樣工作。
square_three_times = repeat(lambda x: x**2, 3)
print(square_three_times(3)) return 6561
我試過類似的東西,但我真的失去了,不知道該怎麼做。
def repeat(fn, n):
if n == 1:
return fn(n):
else:
def result(x):
return fn(n)
return repeat(fn,result(x))
這顯然不會工作,因爲遞歸會一直持續下去。但我不知道我該怎麼寫這個代碼,因爲我需要在進行下一步9^2之前先計算3^2等等。
您是否需要使其遞歸,還是需要它像這樣工作?遞歸不一定涉及。 – Ryan
我需要它是遞歸的yes – Pierre
爲什麼你不使用遞歸變體的'x'參數? – filmor