2

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

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

这就是我目前所拥有的

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

我知道我完全离开了,如果没有递归,这会更容易,但这是我的任务所必需的。

4

3 回答 3

3

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

问: 是printPattern(n)为了n>=1什么?
答:*然后printPattern(n-1),然后!

现在你应该可以做到了。只记得递归思考。

于 2012-10-23T03:37:23.347 回答
2

递归基于两件事:

  • 基本情况
  • 考虑到一些不是基本情况的东西,一种基于更接近基本情况的东西来获得答案的方法。

在您的情况下,最简单的基本情况可能是0- 这将打印事物(空字符串)。printPattern(0)也是如此''

那么如何从输入中接近 0 呢?好吧,可能通过将其减少 1。

因此,假设您目前处于n=5并希望将您的答案建立在更接近基本情况的基础上 - 您希望n=5从for 中获得答案n=4

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

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

你如何从 to 的输出中n=4得到n=5?好吧,你*在前面加上一个!,在最后加上一个。

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

看看这是怎么回事?

于 2012-10-23T03:36:22.350 回答
2

试试这个:

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

print printPattern(5)
> *****!!!!!
于 2012-10-23T03:38:56.187 回答