Python:递归和返回语句

时间:2012-10-18 02:46:23

标签: python recursion exponentiation

我有这个简单的代码使用递归来计算指数。除了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))

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 

(与之前的链条相反,因为我们正在连锁链条)。

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