2015-08-18 26 views
0

爲什麼下面的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)) 
+1

因爲z(100)的值是1. –

+0

沒有你想要達到什麼的一些解釋,很難說你應該做什麼。簡單的答案是:忘記遞歸,忘記lambda,並在單個函數的循環中將數字100下降到1。如果你有一些不這樣做的理由,你需要解釋你的目標是什麼。 – BrenBarn

回答

6

當你調用p(z(100)),你傳遞z(100)作爲參數。這意味着zp開始之前運行完成。 z「默默地」執行所有的遞歸操作(因爲它本身不打印任何東西),並且所有p看到的是最後返回的1

如果您想要打印每個遞歸,您需要在正在遞歸的函數中包含打印。

+0

z = lambda x:1如果x == 0否則p(z(x-1))仍然只打印1 ... –

+0

@MatthewduPlessis:我不認爲這是個好主意,因爲每次調用'p '仍然只能看到一個值,所以'while t'將是一個無限循環。 – BrenBarn

+0

@MatthewduPlessis,使其成爲一個正常的功能和'打印x' –

1

你的lambda可以返回的唯一值是1。

+0

我將如何使用else語句將值返回給lambda? –

+0

嘗試改用類似的東西(只是爲了向你展示它的區別)'z = lambda x:1如果x == 0 else x + z(x-1)' - 那應該告訴你你需要去的方式。 – holdenweb