迭代和递归:分别用迭代(iterPower(base, exp)) 和递归(recurPower(base, exp)) 方...
想请问递归代码是否正确?看了好多关于迭代和递归区别的文章,但感觉反应在代码上还是不太能理解。迭代代码:
def iterPower(base,exp):
result=1.0
while exp>0:
result*=base
exp-=1
return result
print(iterPower(2, 5))
递归代码
def recurPowerNew(base, exp):
if exp == 0:
return 1
else:
return base**exp
print(recurPowerNew(2,5)) 你给出的迭代代码是正确的,而递归代码没有正确地实现递归。
你的递归代码是直接计算 base 的 exp 次方,而不是使用递归的方式。
递归版本的代码应该如下所示:
def recurPower(base, exp):
if exp == 0:
return 1
else:
return base * recurPower(base, exp - 1)
print(recurPower(2, 5))
在这个递归版本中,我们在每次递归调用中将指数减少1,直到指数为0时递归终止。
递归实际上是将问题分解为更小的子问题,然后将子问题的解决方案组合起来以解决原始问题。
在这个例子中,子问题是计算 base 的 exp-1 次方,然后将结果乘以 base 以得到 base 的 exp 次方。 你的递归代码是可以工作的,但它并没有真正体现出递归的特性,因为它只是用了指数运算符(**)来计算结果。一个更能展示递归思想的例子是,利用递归来实现指数幂的计算。
下面是一个递归计算幂的例子:def recurPower(base, exp):
if exp == 0:
return 1
elif exp % 2 == 0:
return recurPower(base*base, exp/2)
else:
return base * recurPower(base, exp-1)
这个函数接受一个底数(base)和指数(exp),并返回base的exp次幂。如果指数为0,那么返回1。如果指数是偶数,那么递归调用recurPower(base*base, exp/2),这相当于将指数除以2,底数变成原来的平方,以此类推。如果指数是奇数,那么返回base * recurPower(base, exp-1),这相当于将指数减1,递归计算base的(exp-1)次幂,再将结果乘以base。
使用这个递归函数来计算2的5次幂的代码如下:
print(recurPower(2, 5))
这将输出32,这是正确的答案。
需要注意的是,递归代码必须满足两个条件:递归基础条件(base case)和递归条件(recursive case)。在这个例子中,基础条件是当指数为0时,结果为1。递归条件是当指数为偶数时,递归调用recurPower(base*base, exp/2),否则递归调用base * recurPower(base, exp-1)。基础条件保证了递归结束,而递归条件则递归地计算幂。 {:7_141:}
页:
[1]