使用python递归打印星号

2024-10-04 05:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在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)

预期的输出应该递归地调用,如开头所述。对于使用递归解决此问题的更简单方法的任何建议也将受到赞赏。还想知道如何克服思维过程,同时与递归问题或任何文章任何人发现有助于理解概念的递归。谢谢您!你知道吗


Tags: 方法用户程序表单basereturnifdef
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))

输出:

***
**
*
**
***

您可以这样做,例如:

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

也可以使用递归打印函数代替print("*" * n)。你知道吗

思考的过程可以是这样的:每次递归调用都会让你更深一层,而当你从递归调用中恢复过来时,你会上升一层。如果将其逆时针旋转90度,也可以在输出中看到这种V形状的模式:您在递归中越走越深,然后触及基本大小写,然后开始升序,直到第一次调用结束。你知道吗

这里有一个小的变化,为了一个更简单的答案。“诀窍”是知道调用递归的位置:在print语句之间。当EME>退出时:当我们到达^ {< CD2> }(或小于^ {< CD2> },如果我们要小心),但不要在打印最后一个孤独星号中间。你知道吗

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

它工作正常:

printPattern(5)

*****
****
***
**
*
**
***
****
*****

相关问题 更多 >