2012-10-23 109 views
2

我需要編寫一個遞歸函數printPattern(),它將整數n作爲參數,並在一行中打印n個星號標記,後跟n個感嘆號。該函數不應該有任何循環,不應該使用字符串的乘法。字符的打印只能遞歸地完成。以下是該函數的行爲的一些例子:打印模式遞歸

>>>printPattern(3) 
***!!! 
>>>printPattern(10) 
**********!!!!!!!!!! 

這是我目前所面對的

def printPattern(n): 
if n < 1: 
    pass 
else: 
    return '*'*printPattern(n)+'!'*printPattern(n) 

我知道我完全脫落,而這不遞歸會更容易,但這是我的任務所必需的。

回答

3

問:什麼是printPattern(0)
答:沒有。

問:什麼是printPattern(n),對於n>=1
A:*,然後printPattern(n-1),然後!

現在你應該可以做到了。請記住遞歸思考。

2

遞歸是基於兩點:

  • 基本情況
  • 的方式來得到答案基於斷更接近於基本情況,考慮的東西,這不是基本情況。

在你的情況,最簡單的基本情況可能是0 - 這將打印的東西(空字符串)。所以printPattern(0)''

那麼你如何從你的輸入中接近0?那麼,可能通過減少1。

因此,假設你目前在n=5,並希望你的答案基於更接近於基本情況 - 你想要得到的答案爲n=5從一個n=4

n=5的輸出是*****!!!!!

n=4的輸出是****!!!!

你如何從n=4的輸出得到n=5?那麼,你在前面加上*,最後加上!

所以你可以說printPattern(5)實際上只是'*' + printPattern(4) + '!'

看看這是怎麼回事?

2

試試這個:

def printPattern(n): 
    if n <= 0: 
     return '' 
    return '*' + printPattern(n-1) + '!' 

print printPattern(5) 
> *****!!!!! 
+0

,打印在@nneonneo那裏... – nneonneo

+0

之間用空格字符,定了! –