0

我有这个使用递归计算指数的简单代码。我了解递归是如何在这里工作的,除了: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))
4

2 回答 2

4

我不确定我是否理解这个问题。基本情况下的 1 就在那里base^0(对于任何非零基数),而且因为它是乘法恒等式,所以你可以自由地乘以它。

它可能会帮助您尝试“展开”递归,以查看数字的去向:

recurPower(5, 2) = 
5 * recurPower(5, 1) = 
5 * 5 * recurPower(5, 0) =
5 * 5 * 1 =
25

用 2 或 3 代替 1 可以得到你试图计算的指数的两到三倍。

于 2012-10-18T03:14:25.937 回答
2

这里发生了什么,您最终会得到一系列返回值,这些值将以该return 1语句返回的值开头,例如:

recurPower(5,2) == 
recurPower(5,2) -> recurPower(5,1) -> recurPower(5,0)

然后 return 语句将执行以下操作:

1 -> (1)*5 -> (5)*5 

(与上一个链相反,因为我们正在级联链)。

如果您将返回值更改为,2您将获得:

2 -> (2)*5 -> (10)*5 

(与上一个链相反,因为我们正在级联链)。

括号中的数字从递归链的下游返回。

于 2012-10-18T03:16:00.120 回答