2012-10-23 81 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

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