我必须编写一个递归函数(我们将其称为arrow(n)),它绘制一个箭头,其工作原理如下:
arrow(4)打印输出:
*
**
***
****
***
**
*其中arrow只能接受一个如上所示的参数。
在递归中只使用一个参数是可能的吗?我很好奇,因为这是一道测试题,我找不到任何答案。
谢谢
发布于 2018-03-22 07:27:02
不,即使在递归时,也需要两个变量(一个用于跟踪当前计数,另一个用于跟踪大小)。
你可以变得可爱起来,并使用一个内部函数。
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)
# *
# **
# ***
# ****
# ***
# **
# *它本质上是更难读的等价物循环,但是嘿,这就是考题的本质。
发布于 2018-03-22 07:39:24
递归在帮助函数中,而不是在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)输出:
*
**
***
****
***
**
*发布于 2018-03-22 07:42:51
这是通过设置一个全局变量来记住要迭代到哪里:
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)https://stackoverflow.com/questions/49417987
复制相似问题