我必须编写一个递归函数(我们称之为arrow(n)
),它会绘制一个像这样的箭头:
arrow(4)
印刷输出:
*
**
***
****
***
**
*
其中arrow
只能采用如上所示的一个参数。
只能通过递归使用一个参数吗?我很好奇,因为这是一个测试问题,我无法找到任何解决方案。
由于
答案 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)