簡體   English   中英

Python 遞歸 function 定義存儲問題

[英]Python recursive function definition storage issue

我試圖通過存儲數學系列的每個步驟來獲取遞歸定義的函數列表: x^0+x^1+x^2+x^3+...f0(x)=1, f1(x)=1+x, f2(x)=1+x+x², f3(x)=1+x+x²+x³, ...

我在 python 中對此進行了編碼:

n = 3
devs = [lambda x: 1]
for k in range(n):
    devs.append(lambda x, f=devs[k]: f(x) + x**(k+1))
print(devs[-1](4))  # x=4

我在這個答案中了解到,您需要將之前的 function 作為默認參數傳遞,以解決最大遞歸深度錯誤,但這會輸出193
我認為這與默認參數中的k有關。 它似乎計算: 1+4^3+4^3+4^3=193 ,或更准確地說是1+n*x^n而不是x^0+x^1+...+x^n

你能告訴我我在這里做錯了什么嗎?

我認為您鏈接的同一個問題可以解決您的問題。 因為 function 中的 k 僅在循環外部進行評估,所以它將具有循環中的最后一個值。 您可以查看文檔以了解它是如何深入工作的。 正確的代碼是

n = 4
devs = [lambda x: 1]
for k in range(n):
    devs.append(lambda x, f=devs[k], j=k: f(x) + x**(j+1))

一個班輪只是為了好玩!

n=10
devs = (lambda f:[f] + [f := (lambda x, a=k, g=f: g(x) + x**(a+1)) for k in range(n)])(lambda x:1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM