首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用使用python的递归打印星号

使用使用python的递归打印星号
EN

Stack Overflow用户
提问于 2019-08-05 21:15:48
回答 4查看 864关注 0票数 1

我正在处理python中的递归,试图在给用户输入时使用递归来打印星号,例如:3程序应该输出:

代码语言:javascript
复制
***
**
*
**
***

当用户输入为3时,我设法打印输出如下:

代码语言:javascript
复制
***
**
*

当printPatternRecur被调用时,它打印到目前为止管理的输出,

代码语言:javascript
复制
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)

预期的输出应该像一开始提到的那样递归地调用。对于使用递归解决这一问题的更简单方法的任何建议也将受到赞赏。此外,还想知道如何在处理递归问题时克服思维过程,或者了解递归概念的任何文章。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-08-05 21:20:43

您可以这样做,例如:

代码语言:javascript
复制
>>> def pattern(n):
...     if n == 1:
...         return print("*")
...     print("*" * n)
...     pattern(n - 1)
...     print("*" * n)
...     
>>> pattern(5)
*****
****
***
**
*
**
***
****
*****

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

思考过程可以是这样的:每一个递归调用都会降低一个层次,当您从递归调用中返回时,您将提升一级。如果逆时针方向旋转90度,您也可以在输出中看到这个V-shaped模式:您越走越深,深入递归,然后到达基本情况,然后开始上升,直到退出第一个调用。

票数 4
EN

Stack Overflow用户

发布于 2019-08-05 21:35:52

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

代码语言:javascript
复制
def printPattern(n):
    print('*' * n)
    if n <= 1: return
    printPattern(n - 1)
    print('*' * n)

它如预期的那样运作:

代码语言:javascript
复制
printPattern(5)

*****
****
***
**
*
**
***
****
*****
票数 1
EN

Stack Overflow用户

发布于 2019-08-05 21:32:10

您可以使用外部包装函数:

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
***
**
*
**
***
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57366181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档