首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用递归绘制箭头模式

使用递归绘制箭头模式
EN

Stack Overflow用户
提问于 2018-03-22 07:12:13
回答 3查看 392关注 0票数 0

我必须编写一个递归函数(我们将其称为arrow(n)),它绘制一个箭头,其工作原理如下:

代码语言:javascript
复制
arrow(4)

打印输出:

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

其中arrow只能接受一个如上所示的参数。

在递归中只使用一个参数是可能的吗?我很好奇,因为这是一道测试题,我找不到任何答案。

谢谢

EN

回答 3

Stack Overflow用户

发布于 2018-03-22 07:27:02

不,即使在递归时,也需要两个变量(一个用于跟踪当前计数,另一个用于跟踪大小)。

你可以变得可爱起来,并使用一个内部函数。

代码语言:javascript
复制
def arrow(n):
   def _arrow(k, n):
       print('*' * (n - k + 1))
       if k > 1:
           _arrow(k - 1, n)
           print('*' * (n - k + 1))
   _arrow(n, n)

代码语言:javascript
复制
arrow(4)
# *
# **
# ***
# ****
# ***
# **
# *

它本质上是更难读的等价物循环,但是嘿,这就是考题的本质。

票数 0
EN

Stack Overflow用户

发布于 2018-03-22 07:39:24

递归在帮助函数中,而不是在arrow中,但在每种情况下它仍然是单参数递归。

代码语言:javascript
复制
def arrow_top(n):
    if n > 0:
        arrow_top(n-1)
        print('*' * n)

def arrow_bot(n):
    if n > 0:
        print('*' * n)
        arrow_bot(n-1)

def arrow(n):
    arrow_top(n)
    arrow_bot(n-1)

arrow(4)

输出:

代码语言:javascript
复制
*
**
***
****
***
**
*
票数 0
EN

Stack Overflow用户

发布于 2018-03-22 07:42:51

这是通过设置一个全局变量来记住要迭代到哪里:

代码语言:javascript
复制
def arrow(n):
    # remember max, but only once
    global top
    try:
        top
    except NameError:
        top = n
        n = 1

    if n < top:
        print(n * '*')
        arrow(n + 1)
        print(n * '*')
    elif n == top:
        print(n * '*')

arrow(4)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49417987

复制
相关文章

相似问题

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