【问题标题】:Python beginner recursionPython初学者递归
【发布时间】:2012-10-26 21:07:17
【问题描述】:

我正在尝试获得一个简单的函数,它需要 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。我尝试将它分成两个打印语句并使用多个递归......但它变成了一个混乱的模式。

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

【问题讨论】:

标签: python recursion


【解决方案1】:

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

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)
> *****!!!!!

【讨论】:

  • 我认为,OP 不想要这个。他说,当n大于1时,则打印n copies of * + n copies of !
  • 所以,对于 n = 5 :- 5 *5 !,然后是 n = 4 : - 4 *4!,依此类推,直到 n = 0
  • 还是我误解了这个问题? :(
  • @RohitJain 我相信我的回答是正确的,“n 份 *”加上“n 份!”就是这个意思,比如 n==3: ***!!!
  • 谢谢奥斯卡!就是这样,我正在使用该技术,但之前没有在迭代中使用!就是这样。谢谢!
【解决方案2】:

假设您有n - 1 的解决方案。前置* 并附加!

def repeat(n):
    if n > 0:
        print("*", end=" ")
        repeat(n - 1)
        print("!", end=" ")

【讨论】:

    【解决方案3】:

    以下内容可以满足您的需求。

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

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

    【讨论】:

      【解决方案4】:

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

      def repeat(n):
          if n >= 0:
              print((n*'*')+(n*'!'), end=' ')
              return repeat(n-1)
      

      【讨论】:

        【解决方案5】:

        我会在这里使用两个字符串,并在 n&lt;=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))
        

        输出:

        *****!!!!!
        ***!!!
        

        【讨论】:

          猜你喜欢
          • 2011-07-12
          • 2016-09-23
          • 1970-01-01
          • 2021-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-19
          • 1970-01-01
          相关资源
          最近更新 更多