2013-10-06 99 views
-2

試圖找出我如何可以從函數返回多個值。我試過搜索信息,看來我應該使用元組。Python的兩個返回值與遞歸

這裏是一個正常的遞歸函數(從另一個計算器問題複製):

def backward(text): 
    if text == '': 
     return text 
    else: 
     return text[-1] + backward(text[:-1]) 

現在,讓我們說,我希望函數返回兩個相反的文字,而且在一個元組的初始文本。我將如何使它工作? 我想獲得:

>>> print(backward('hello')) 
('olleh','hello') 

不斷收到錯誤,如「無法將‘元組’對象隱含STR」。有什麼想法? 謝謝。

+0

只是'回報first_thing,second_thing' – georg

+0

返回一個元組或字典,如果你有這樣做的必要。那麼你的問題在哪裏? –

+0

此外,你的代碼段很好,請發佈你的錯誤代碼。 – georg

回答

0
def backward(text): 
    return (backwardImpl(text), text) 

def backwardImpl(text): 
    if text == '': 
     return text 
    else: 
     return text[-1] + backwardImpl(text[:-1]) 

 

>>> print(backward('hello')) 
('olleh','hello') 

版本具有一個功能:

def backward(text, recursiveCall = False): 
    if not recursiveCall: 
     return (backward(text, True), text) 

    if text == '': 
     return text 
    else: 
     return text[-1] + backward(text[:-1], True) 

但是,如果客戶端設置爲True秒參數調用它會破壞的結果。

+0

你的兩個函數都被命名爲'backward'。 – Tim

+0

@Tim對,謝謝,修正:) – BartoszKP

+0

花了我一些時間去了解最後一行,但我想我現在明白了!順便說一句:有可能只用一個函數來做到這一點? – user2005203

3

你不需要遞歸這個

def backward(text): 
    if text == '': 
     return text 
    else: 
     return text[::-1], text 
+0

最有可能的是它的一項家庭作業。 –

+1

@ user2005203 - 如果這是家庭作業,您應該提及它是作業並解釋實際作業是什麼。 [stackoverflow家庭作業政策](http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions) –