鱼C论坛

 找回密码
 立即注册
查看: 8080|回复: 10

使用递归编写一个 power() 函数模拟内建函数 pow(),即 power(x, y) 为计算并返回...

[复制链接]
发表于 2019-5-3 20:52:08 | 显示全部楼层 |阅读模式

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

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

x
def power(x, y):
    if y:   #这里为什么是y
        return x * power(x, y-1)    #返回的时候为什么是y-1
    else:
        return 1                         #  能给讲一下原理吗  感激不尽
   
print(power(2, 3))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-3 21:13:56 | 显示全部楼层
Power(Number,Power)。其中Number表示底数,Power表示幂值。
如2的3次方,可以写为:POWER(2,3)
从上面话就清楚的可以看出POWER的用法了。
学过数学的人都知道2**3 不就是 2 * 2 * 2 乘3次


回到代码
def power(x, y):
    if y:   #y就是次数咯。 只要不是0 都为真
        return x * power(x, y-1)    # y - 1 下次y不就少1了
    else:
        return 1                         #  最后0的时候返回1
   
print(power(2, 3))

代码递归回来结果就是 2*2*2*1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-5-4 13:47:39 | 显示全部楼层
ba21 发表于 2019-5-3 21:13
Power(Number,Power)。其中Number表示底数,Power表示幂值。
如2的3次方,可以写为:POWER(2,3)
从上面话 ...

我就是搞不懂    return x * power(x, y-1)  这句
x* power(x, y-1)  不就是  x*x*y-1 吗
那上面的  if  y    才调用了一次呀
  x* power(x, y-1)   中的( x, y-1)是表示什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-4 16:31:34 From FishC Mobile | 显示全部楼层
这里用到了递归。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-4 19:17:24 | 显示全部楼层
li1991716 发表于 2019-5-4 13:47
我就是搞不懂    return x * power(x, y-1)  这句
x* power(x, y-1)  不就是  x*x*y-1 吗
那上面的  if ...

x* power(x, y-1)  不就是  x*x*y-1 吗 你的理解能力真的是会笑死多少人。
power(x, y-1)是函数,既然是函数,你不用进入函数? 到你这里就成了 x*y-1了?
编程要用脑,不是用眼,一眼能看出来还编屁的程。
2,3数字不大吧,把他带入跟着代码一句句的走,花不了你多少时间。

总的来讲,不是你不理解,是你不原花时间走流程。自以为一眼看过去觉得是什么就是什么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-25 22:01:17 | 显示全部楼层
本帖最后由 阳顺 于 2019-5-25 22:34 编辑

好像有点通了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-4 11:08:53 | 显示全部楼层
好像有点通了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 14:46:00 | 显示全部楼层
它不是说直接乘以后面的参数,而是乘以上次调用的结果。

def power(x, y):
    if y:
        return x * power(x, y-1)
    else:
        return 1
这里的return 1很重要,return 1是说y=0时函数运行结果返回1,这个y-1总会等于0,那么我们就从0开始倒着算,
如果参数是2,4,你可以把这个过程分解为:
y=0那次执行函数返回1;
y=1那次返回的是2*1 = 2;
y=2那次返回的是2*(2*1) = 4;此处加括号为了看起来明了。
y=3那次返回的是2*(2*(2*1)) = 8;
y=4那次返回的是2*(2*(2*(2*1))) = 16。


这个过程也印证了为什么递归的两个基本条件的第二条 “设置了正确的返回条件


个人理解,欢迎指正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-4 15:02:09 | 显示全部楼层
def add(x,y):
        if y:
                print(x,y)
                return x * add(x,y-1)
        else:
                print(x,y)
                return 1
print(add(2,3))

慢慢研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 13:13:48 | 显示全部楼层
def aa(x, y):
    if y:
        return x * x * (y-1)
    else:
        return 1
   
print(aa(2, 3))
如果给你这么写 你应该可以看得懂嗷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-6 14:50:03 | 显示全部楼层
def power(x,y):
    if y: # y是次数,只要y不等于0都进入if里面
        print("y="+str(y))
        """
        第一次进入函数y =3 ,进入if,返回的值是2 * 2 * 2
        第二次进入函数y=2,进入if,调用上次返回的结果是 2 * 2 * 2 * (2-1) = 2 * 2 * 2 * 1
        第三次进入函数y=1,进入if,调用上次返回的结果是 2 * 2 * 2 * 1 * 0(任何非0实数的0次幂都等于1,0的0次幂无意义.)
        所以第三次就是y-1 = 0,else里面返回的是1也就是,2 * 2 * 2 * 1 * 1 = 2 * (2 * (2 * (1 * 1))) 返回的2的3次幂是8
        """
        return x * power(x,y-1)
    else:
        print("y="+str(y)+",y为false已退出")
        # 最后0的时候返回1
        return 1

print(power(2,3))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 01:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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