2017-04-08 228 views
0

我學習遞歸函數的斯威夫特,我做了以下內容:遞歸函數

func recursive(i: Int) -> Int { 
    if i == 1 { 
     return 1 
    } else if i >= 2 { 
     return recursive(i: i - 1) + 1 
    } 
    return 0 
} 

我無法弄清楚,爲什麼上面的功能無法正常工作。我已經通過執行下面的測試print(recursive(10)),它給了我一個輸出10.我預計輸出爲1.任何人都可以幫助我嗎?先謝謝你。

我在XCode 8.3上使用Playgrounds。

+0

'遞歸(10)== 10'是正確的。你爲什麼期望別的東西? –

+0

是的,它應該是1,但輸出顯示爲10. –

+0

嗯,是的,因爲你在每次遞歸調用時加1,並且做了9次遞歸調用 - 所以1 + 9 = 10 – Hamish

回答

0

當你這樣做:

recursive(i: i - 1) + 1 

,那你就是在效果遞減i,然後再增加了。這消除了,你再次到達i

讓我們寫下的計算會爲i = 3來完成:

(3 - 1) + 1 = ((2 - 1) + 1) + 1 = (((1) + 1) + 1) = 3 
+0

感謝您的解釋!在我看來,'+ 1'只發生過一次,'(i - 1)'會持續發展,直到達到1爲止。我真的很困惑自己。 –