在pyschools,我被困在2递归函数的力量
>>> createStars(0) # 2 to power of 0 = 1 '*' >>> createStars(1) # 2 to power of 1 = 2 '**' >>> createStars(2) # 2 to power of 2 = 4 '****' >>> createStars(3) # 2 to power of 3 = 8 '********'
我想做的是:
def createStars(x): if x == 0: return '*' else: return '*' * x + createStars(x-1)
然而,这似乎是'x'不是2的幂的总和。 意思是,当x高于2
时,这将会中断我知道如何以递归方式执行2的强大功能但不知道在哪里更改以使createStars()有效。
def power(x, n): if n == 0: return 1 else: return x * power(x, n-1)
PS。我知道很容易使用非递归方法来解决它。 但是想以递归的方式寻求建议。
感谢。
答案 0 :(得分:1)
def createStars(x):
if x == 0:
return '*'
else:
return createStars(x-1) * 2
(递归中的每一步都会使输出字符串中的星数加倍。)
答案 1 :(得分:1)
你非常接近!
我建议比较你给我们的两段代码。 (我将重命名它以使类比更清晰):
def createStars(n):
if n == 0:
return '*'
else:
return '*' * n + createStars(n-1)
def power(x, n):
if n == 0:
return 1
else:
return x * power(x, n-1)
他们几乎完全相同的结构。特别是,每个的最后一行结构略有不同。
在(工作)权力中,您将n-1
的结果乘以x
。因此,当计算功率(2,6)时,你将功率(2,5)增加2.(即你将 32乘以2得到64)。
在(不工作)createStars中,你没有将n-1
个案的结果乘以任何东西;你只是在它的开头添加东西。如果你改变它以使结构匹配怎么办?
此外,您应该检查createStars(1)
的结果。