打印模式递归

时间:2012-10-23 03:31:58

标签: python design-patterns recursion

我需要编写一个递归函数printPattern(),它以整数n作为参数,并在一行上打印n个星号后跟n个感叹号。该函数不应该有任何循环,不应该使用字符串的乘法。字符的打印应仅以递归方式完成。以下是该函数行为的一些示例:

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

这就是我现在所拥有的

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

我知道我已经完全离开了,没有递归会更容易,但这对我的任务来说是必要的。

3 个答案:

答案 0 :(得分:3)

问:printPattern(0)是什么? 答:没什么。

问:printPattern(n)的{​​{1}}是什么? 答:n>=1,然后是*,然后是printPattern(n-1)

现在你应该能够做到。只记得以递归的方式思考。

答案 1 :(得分:2)

递归基于两件事:

  • 一个基本案例
  • 一种基于更接近基本情况的答案得到答案的方法,给出的东西不是基本情况。

在你的情况下,最简单的基本情况可能是0 - 它会打印东西(空字符串)。因此printPattern(0)''

那么你如何从输入中接近0?好吧,可能会减少1。

因此,假设您目前处于n=5,并希望根据基本情况更接近您的答案 - 您希望从n=5获得n=4的答案1}}。

n=5的输出为*****!!!!!

n=4的输出为****!!!!

如何从n=4的输出到n=5?好吧,你在前面加*,在最后添加!

所以你可以说printPattern(5)实际上只是'*' + printPattern(4) + '!'

看看这是怎么回事?

答案 2 :(得分:2)

试试这个:

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

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