2

我正在尝试获得一个简单的函数,它需要 n 并打印

If n > 0:
    print((n*'*')+(n*'!'), end=' ')

并试图以递归方式获得相同的解决方案。我是递归的初学者,经常得到“更高层次的思考”,但我无法理解必须遵循的代码。

我的基本情况是,当 n 为 0 时,它什么也不打印。当 n 大于 1 时,它将打印 n 份 * + n 份!

def repeat(n):
    if n <= 0:
        pass
    else:
        repeat(n-1)
        print((n*'*')+(n*'!'), end=' ')

现在它打印 n,然后连续打印 n-1 直到 0。我尝试将它分成两个打印语句并使用多个递归......但它变成了一个混乱的模式。

我也不允许使用循环。这个让我发疯;除了简单的一行语句之外,我还提出了几种解决方案,但没有一个使用递归。

4

5 回答 5

3

如果您构建并返回一个字符串并在函数外部打印它会更简单,如下所示:

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

或作为单行:

def printPattern(n):
    return '*' + printPattern(n-1) + '!' if n > 0 else ''

无论哪种方式,这都有效:

print printPattern(5)
> *****!!!!!
于 2012-10-26T21:24:32.523 回答
1

假设你有一个解决方案n - 1。前置*和附加!.

def repeat(n):
    if n > 0:
        print("*", end=" ")
        repeat(n - 1)
        print("!", end=" ")
于 2012-10-26T21:23:48.197 回答
1

以下是您想要的。

def repeat(n):
  def stars(n):
    return '*'+stars(n-1)+'!' if n > 0 else ''
  print stars(n)

例如,repeat(5)打印*****!!!!!repeat(8)打印 ********!!!!!!!!

于 2012-10-26T21:27:05.550 回答
0

我实际上不知道你在问什么......如果有更有效或更好的方法来做到这一点?这将非常明显:

def repeat(n):
    if n >= 0:
        print((n*'*')+(n*'!'), end=' ')
        return repeat(n-1)
于 2012-10-26T21:18:00.060 回答
0

n<=0我会在这里使用两个字符串,并在使用return而不是在函数内部打印时返回这两个字符串的连接字符串:

def repeat(n, strs1="", strs2=""):     # The Default value of strings is ""

    if n <= 0:
        return strs1 + strs2   # if n<=0 then concatenate the two strings and return them
    else:
        strs1 += "*"          # Add * to strs1
        strs2 += "!"          # Add ! to strs2
        return repeat(n-1, strs1, strs2)  # Pass n-1, as well as the two strings to a recursive call

print(repeat(5))
print(repeat(3))

输出:

*****!!!!!
***!!!
于 2012-10-26T21:18:34.317 回答