鱼C论坛

 找回密码
 立即注册
查看: 2400|回复: 3

[已解决]迭代和递归:分别用迭代(iterPower(base, exp)) 和递归(recurPower(base, exp)) 方...

[复制链接]
发表于 2023-3-25 11:52:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想请问递归代码是否正确?看了好多关于迭代和递归区别的文章,但感觉反应在代码上还是不太能理解。

迭代代码:
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))
最佳答案
2023-3-25 12:02:59
你给出的迭代代码是正确的,而递归代码没有正确地实现递归。

你的递归代码是直接计算 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 次方。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-25 12:02:59 | 显示全部楼层    本楼为最佳答案   
你给出的迭代代码是正确的,而递归代码没有正确地实现递归。

你的递归代码是直接计算 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 次方。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 16:30:29 | 显示全部楼层
你的递归代码是可以工作的,但它并没有真正体现出递归的特性,因为它只是用了指数运算符(**)来计算结果。一个更能展示递归思想的例子是,利用递归来实现指数幂的计算。

下面是一个递归计算幂的例子:
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)。基础条件保证了递归结束,而递归条件则递归地计算幂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-29 08:24:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表