我需要编写一个递归函数printPattern(),它以整数n作为参数,并在一行上打印n个星号后跟n个感叹号。该函数不应该有任何循环,不应该使用字符串的乘法。字符的打印应仅以递归方式完成。以下是该函数行为的一些示例:
>>>printPattern(3)
***!!!
>>>printPattern(10)
**********!!!!!!!!!!
这就是我现在所拥有的
def printPattern(n):
if n < 1:
pass
else:
return '*'*printPattern(n)+'!'*printPattern(n)
我知道我已经完全离开了,没有递归会更容易,但这对我的任务来说是必要的。
答案 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)
> *****!!!!!