2016-01-29 125 views
0

ps:這個問題只是被標記爲重複,並且已經有一個答案。問題是,這個問題與另一個問題不一樣。在這個問題中,我已經知道我的代碼出錯了。我問爲什麼這是錯的。Python遞歸函數輸入

這是udacity,我被要求解決一個問題:

定義過程is_palindrome,即需要輸入一個字符串,並返回一個 布爾值,表示如果輸入的字符串是迴文。

提示:

基本情況:'' =>True

遞歸案例:如果第一個和最後一個字符不匹配=>False

如果它們匹配,是中間迴文?

def is_palindrome(s): 
    if s=='': 
     return True 
    else: 
     if s[0]!=s[-1]: 
      return False 
     else: 
      s=s[1:-1] 
      is_palindrome(s) 

而3輸入的情況下嘗試:

print is_palindrome('') 
#>>> True 
print is_palindrome('abab') 
#>>> False 
print is_palindrome('abba') 
#>>> True 

如果我離開我的代碼那樣,它會返回None的情況下,「阿爸」。它可以通過改變函數的最後一行到

return is_palindrome(s[1:-1]) 

固定請問爲什麼return事?即使沒有回報,不應該只是一次又一次地運行功能is_palindrome()

回答

7

即使沒有返回,它不應該一次又一次地運行函數is_palindrome()?

當然 - 它會一遍又一遍地運行它,但它不會有用的東西,所以你永遠不會看到的結果。這是因爲第一個is_palindrome調用將返回None,而不管遞歸調用的返回值爲is_palindromeNone是沒有指定返回值時的Python默認值)。

+0

當'is_palindrome'再次運行並再次檢查時,已經有一些'return',但是這些run-again-inner'return'不會被返回? –

1

這個任務,不需要遞歸:

In [2]: "aloof"[::-1] 
Out[2]: 'foola' 

簡單地解決它,繼續前進。

+0

我知道如何輕鬆做到這一點。該課程僅將該問題用作遞歸函數如何有用的示例 –