鱼C论坛

 找回密码
 立即注册
查看: 535|回复: 4

[已解决]22讲 递归求解x 的 y 次幂

[复制链接]
发表于 2020-4-11 13:25:16 | 显示全部楼层 |阅读模式

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

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

x
def power(x,y):
    if y == 0:
        return 1
    elif y > 0:
        return x * power(x,y-1)
    else:
        return 1/(x*power(x,y+1))

x = int(input('请输入一个整数:'))
y = int(input('请输入幂:'))
print(power(x,y))


我考虑了当y为负数的情况,但是这段代码实现负次幂答案不正确

还请各位大神指教,哪里出错
最佳答案
2020-4-11 13:29:42
这样试试:
def power(x, y):
    if y == 0:
        return 1
    elif y > 0:
        return x * power(x, y - 1)
    else:
        # abs(y) 是取 y 的绝对值,可以理解为把负数 y 转化为正数
        return 1 / (x * power(x, abs(y) - 1))


x = int(input('请输入一个整数:'))
y = int(input('请输入幂:'))
print(power(x, y))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-11 13:29:42 | 显示全部楼层    本楼为最佳答案   
这样试试:
def power(x, y):
    if y == 0:
        return 1
    elif y > 0:
        return x * power(x, y - 1)
    else:
        # abs(y) 是取 y 的绝对值,可以理解为把负数 y 转化为正数
        return 1 / (x * power(x, abs(y) - 1))


x = int(input('请输入一个整数:'))
y = int(input('请输入幂:'))
print(power(x, y))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-11 13:45:36 | 显示全部楼层

谢谢帮忙修改,这样的结果是正确的
但是我还是不明白从负数+1直至0,按照这种逻辑递归为什么不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 17:16:58 | 显示全部楼层
retear 发表于 2020-4-11 13:45
谢谢帮忙修改,这样的结果是正确的
但是我还是不明白从负数+1直至0,按照这种逻辑递归为什么不对

因为每次递归都会计算 1 / power(),只要一次 1 / 就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 08:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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