爲什麼下面的lambda遞歸只打印1? 它應該從它的值減去1並打印該值。價值不變的遞歸lambda?
def p(t):
print(t)
while t:
print(t)
z = lambda x:1 if x == 0 else z(x-1)
p(z(100))
爲什麼下面的lambda遞歸只打印1? 它應該從它的值減去1並打印該值。價值不變的遞歸lambda?
def p(t):
print(t)
while t:
print(t)
z = lambda x:1 if x == 0 else z(x-1)
p(z(100))
當你調用p(z(100))
,你傳遞z(100)
作爲參數。這意味着z
在p
開始之前運行完成。 z
「默默地」執行所有的遞歸操作(因爲它本身不打印任何東西),並且所有p
看到的是最後返回的1
。
如果您想要打印每個遞歸,您需要在正在遞歸的函數中包含打印。
z = lambda x:1如果x == 0否則p(z(x-1))仍然只打印1 ... –
@MatthewduPlessis:我不認爲這是個好主意,因爲每次調用'p '仍然只能看到一個值,所以'while t'將是一個無限循環。 – BrenBarn
@MatthewduPlessis,使其成爲一個正常的功能和'打印x' –
你的lambda可以返回的唯一值是1。
我將如何使用else語句將值返回給lambda? –
嘗試改用類似的東西(只是爲了向你展示它的區別)'z = lambda x:1如果x == 0 else x + z(x-1)' - 那應該告訴你你需要去的方式。 – holdenweb
因爲z(100)的值是1. –
沒有你想要達到什麼的一些解釋,很難說你應該做什麼。簡單的答案是:忘記遞歸,忘記lambda,並在單個函數的循環中將數字100下降到1。如果你有一些不這樣做的理由,你需要解釋你的目標是什麼。 – BrenBarn