2013-02-15 117 views
1

我需要下面的遞歸代碼幫助。代碼假設打印出每個n後面跟一個*。我意識到我的基本情況可能不正確,它可能是輸出中的字符串引號的原因,但是當我嘗試設置基本情況返回0或n時,我得到錯誤,指出我不能將整數轉換爲隱含的字符串。使用遞歸Python打印輸出

def printPattern(n): 

    if n == 0: 
     return('') 
    else: 
     return('*' + printPattern(n-1) + 'i') 

我的輸出:

>>> printPattern(3) 
'***iii' 

輸出我需要(無串報價):

>>> printPattern(3) 
***iii 

任何想法?我在這裏使用錯誤的邏輯嗎?我應該去我的代碼不同的路徑或無論如何我可以格式化輸出以刪除字符串引號?

+3

使用'print printPattern(3)' – 2013-02-15 09:29:04

+0

非常感謝你的工作。 – Lenny 2013-02-15 09:47:38

+0

我們在這裏幫助那些能夠正確表達他們問題的人:)不要忘記接受(點擊選中標記)你認爲最能回答你的問題的答案:) – akaIDIOT 2013-02-15 09:55:11

回答

2

您可能會看到引號,只是因爲交互式shell向您顯示str類型的東西。嘗試

>>> print printPattern(3) 

將實際打印的模式,而不是僅僅返回它(或者,在Python 3,使用print(printPattern(3))作爲一個函數)。

+0

非常感謝你,幫助並給了我輸出我需要。 – Lenny 2013-02-15 09:49:31

2

您的函數正在構建一個字符串並將其返回。當在交互式shell中運行並調用函數時,Python將打印該元素的表示(repr)。對於字符串,repr包含引號。

您只需要print結果。

如果您想讓您的功能進行打印,則必須對其進行修改。最簡單的方法是使用內部私有函數來構建字符串,並在最後使用print語句。

def printPattern(n): 
    def buildPattern(n): 
     if n == 0: 
      return('') 
     else: 
      return('*' + buildPattern(n-1) + 'i') 
    print(buildPattern(n)) 

順便說一句,你可能不希望使用遞歸該功能Python沒有優化遞歸調用,並具有相當低的遞歸限制(調用堆棧是在默認情況下限制爲一千的高度或者)。

+0

我很感謝幫助,我使用遞歸的原因是爲了更好地編碼。我正在閱讀一本Python書,這是其中一個問題。 – Lenny 2013-02-15 09:48:44