使用递归绘制箭头图案

时间:2018-03-21 23:12:13

标签: python recursion

我必须编写一个递归函数(我们称之为arrow(n)),它会绘制一个像这样的箭头:

arrow(4)

印刷输出:

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

其中arrow只能采用如上所示的一个参数。

只能通过递归使用一个参数吗?我很好奇,因为这是一个测试问题,我无法找到任何解决方案。

由于

3 个答案:

答案 0 :(得分:0)

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

你可以变得可爱并使用内在功能。

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)

arrow(4)
# *
# **
# ***
# ****
# ***
# **
# *

它基本上是更难以理解的循环,但嘿,这就是考试问题的本质。

答案 1 :(得分:0)

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

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)

输出:

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

答案 2 :(得分:-1)

这可以通过设置全局来记住迭代到的位置:

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)