我有这个简单的代码使用递归来计算指数。除了if exp <= 0: return 1
之外,我理解递归是如何工作的。假设我打电话给这个功能,给我五个第二个电源。如果我让它返回1,它将给我正确的值25,但如果是2则返回50和3,75。
我在查看环境中的确切效果时遇到了一些麻烦:
def recurPower(base,exp):
if exp <= 0:
return 1
return base*recurPower(base,exp-1)
print str(recurPower(5,2))
答案 0 :(得分:4)
我不确定我是否理解这个问题。基本情况下的1是base^0
(对于任何非零基数),也因为它是乘法标识,所以你可以自由地乘以它。
它可能会帮助您尝试“展开”递归,以查看数字的去向:
recurPower(5, 2) =
5 * recurPower(5, 1) =
5 * 5 * recurPower(5, 0) =
5 * 5 * 1 =
25
用2或3代替1会得到你想要计算的指数的两到三倍。
答案 1 :(得分:2)
这里发生了什么,你最终会得到一系列返回值,这些值将以return 1
语句返回的值开头,例如:
recurPower(5,2) ==
recurPower(5,2) -> recurPower(5,1) -> recurPower(5,0)
返回语句将使其成为:
1 -> (1)*5 -> (5)*5
(与之前的链条相反,因为我们正在连锁链条)。
如果您将返回值更改为2
,您将获得:
2 -> (2)*5 -> (10)*5
(与之前的链条相反,因为我们正在连锁链条)。
括号中的数字从递归链的下方返回。