[英]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.