【问题标题】:Print Asterisks using recursion using python使用python使用递归打印星号
【发布时间】:2019-08-05 21:15:48
【问题描述】:

我正在研究 python 中的递归,当给出用户输入时,尝试在表单中使用递归打印星号:3 程序应输出:

***
**
*
**
***

当用户输入为 3 时,我已成功打印输出如下:

***
**
*

当 printPatternRecur 被调用时,它会打印我目前管理的输出

def printPattern(n):
    # Base case
    if (n < 1):
        return

    print('*', end = " ")
    printPattern(n - 1)

def printPatternRecur(n):
    # Base case
    if (n < 1):
        return 

    printPattern(n)

    print("")
    printPatternRecur(n - 1)

预期的输出应该像一开始提到的那样递归调用。任何有关使用递归解决此问题的更简单方法的建议也值得赞赏。也很想知道如何在处理递归问题或任何人发现对理解递归概念有用的文章时克服思考过程。谢谢!

【问题讨论】:

    标签: python python-3.x recursion


    【解决方案1】:

    你可以这样做,例如:

    >>> def pattern(n):
    ...     if n == 1:
    ...         return print("*")
    ...     print("*" * n)
    ...     pattern(n - 1)
    ...     print("*" * n)
    ...     
    >>> pattern(5)
    *****
    ****
    ***
    **
    *
    **
    ***
    ****
    *****
    

    您也可以使用递归打印函数代替print("*" * n)

    思考过程可以这样进行:每次递归调用都会使您下降一个级别,而当您从递归调用返回时,您会上升一个级别。如果您将其逆时针旋转 90 度,您还可以在输出中看到这个 V 形模式:您越来越深入地进入递归,然后您达到基本情况,然后开始上升,直到您退出第一个调用.

    【讨论】:

      【解决方案2】:

      这里有一个细微的变化,以获得更简单的答案。 “诀窍”是知道 在哪里 调用递归:在 print 语句之间。 何时退出:当我们到达1(或小于1,如果我们要小心的话),但不是在打印中间最后一个孤独的星号之前。

      def printPattern(n):
          print('*' * n)
          if n <= 1: return
          printPattern(n - 1)
          print('*' * n)
      

      它按预期工作:

      printPattern(5)
      
      *****
      ****
      ***
      **
      *
      **
      ***
      ****
      *****
      

      【讨论】:

        【解决方案3】:

        您可以使用外包装函数:

        def outer(_d):
          def tri(s, d, flag = 0):
            if s == 1:
              return '*'+'\n'+tri(2, d, 1)
            return ('*'*s)+'\n'+tri(s-1 if not flag else s+1, d, flag) if not flag or s != d else '*'*d
          return tri(_d, _d) 
        
        print(outer(3))
        

        输出:

        ***
        **
        *
        **
        ***
        

        【讨论】:

          【解决方案4】:

          递归遵循“先进后出”的逻辑格式。这意味着压入堆栈的第一个函数调用将最后执行。函数调用被压入堆栈,然后一个接一个地执行。递归函数有一个基本情况,它会导致压入堆栈的函数调用返回或从堆栈中弹出。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-11-27
            • 1970-01-01
            • 2023-01-20
            • 1970-01-01
            • 1970-01-01
            • 2022-11-25
            • 2016-02-05
            相关资源
            最近更新 更多