鱼C论坛

 找回密码
 立即注册
查看: 1439|回复: 7

[已解决]定义类似Pow函数的问题

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

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

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

x
def poe(x,y):
    if y:
        return x*poe(x,y-1)#假设这里X和Y都是4  应该是4*(4,3)=4*12或者4*4*4*4=1024啊 为啥是4的三次方结果 而且为啥(X,Y)就代表是X的Y次方 这里是自定义函数啊 为啥不是X直接乘Y 求解求解啊 脑袋都想破了
    else:
        return 1
print(poe(4,4))
最佳答案
2020-9-11 20:21:01
想象力不够,就有笔头写一下啊。俗话说好脑子不如烂笔头
4的4次方太长了,给你写一下2的3次方吧

执行print(poe(2,3)),会先去调用poe,然后得到其返回值
第一次调用poe,此时x=2,y=3,遇到 if 判断,进入 if 语句块,执行return x*poe(x,y-1) 会先去调用poe,再将其返回值与x相乘
    第二次调用poe,此时x=2,y=2,遇到 if 判断,进入 if 语句块,执行return x*poe(x,y-1) 会先去调用poe,再将其返回值与x相乘
        第三次调用poe,此时x=2,y=1,遇到 if 判断,进入 if 语句块,执行return x*poe(x,y-1) 会先去调用poe,再将其返回值与x相乘
            第四次调用poe,此时x=2,y=0,遇到 if 判断,进入 else 语句块,执行return 1, 直接返回1,返回到上次调用poe的位置
        返回到第三次调用时的 if 语句块内return语句处,得到 x*1 即2,然后return 2, 直接返回1,返回到上次调用poe的位置
    返回到第二次调用时的 if 语句块内return语句处,得到 x*2 即4,然后return 4, 直接返回4,返回到上次调用poe的位置
返回到第一次调用时的 if 语句块内return语句处,得到 x*4 即8,然后return 8, 直接返回8,返回到上次调用poe的位置
返回到print中,print(8)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-11 19:37:40 | 显示全部楼层
pow(x,y)的意思不就是x的y次方吗?就不用想那么多,就是x的y次方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-11 19:41:12 From FishC Mobile | 显示全部楼层
小甲鱼的铁粉 发表于 2020-9-11 19:37
pow(x,y)的意思不就是x的y次方吗?就不用想那么多,就是x的y次方

老哥。。我这是poe啊。。。自定义函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-11 19:44:10 | 显示全部楼层
2915658109 发表于 2020-9-11 19:41
老哥。。我这是poe啊。。。自定义函数

我看你的标题是pow函数问题,就以为是就次方的函数了
这应该是一个编程练习吧,你可以发发题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-11 19:45:11 From FishC Mobile | 显示全部楼层
救命啊。。。有木有大神讲解下思路。。实在想不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-11 20:21:01 | 显示全部楼层    本楼为最佳答案   
想象力不够,就有笔头写一下啊。俗话说好脑子不如烂笔头
4的4次方太长了,给你写一下2的3次方吧

执行print(poe(2,3)),会先去调用poe,然后得到其返回值
第一次调用poe,此时x=2,y=3,遇到 if 判断,进入 if 语句块,执行return x*poe(x,y-1) 会先去调用poe,再将其返回值与x相乘
    第二次调用poe,此时x=2,y=2,遇到 if 判断,进入 if 语句块,执行return x*poe(x,y-1) 会先去调用poe,再将其返回值与x相乘
        第三次调用poe,此时x=2,y=1,遇到 if 判断,进入 if 语句块,执行return x*poe(x,y-1) 会先去调用poe,再将其返回值与x相乘
            第四次调用poe,此时x=2,y=0,遇到 if 判断,进入 else 语句块,执行return 1, 直接返回1,返回到上次调用poe的位置
        返回到第三次调用时的 if 语句块内return语句处,得到 x*1 即2,然后return 2, 直接返回1,返回到上次调用poe的位置
    返回到第二次调用时的 if 语句块内return语句处,得到 x*2 即4,然后return 4, 直接返回4,返回到上次调用poe的位置
返回到第一次调用时的 if 语句块内return语句处,得到 x*4 即8,然后return 8, 直接返回8,返回到上次调用poe的位置
返回到print中,print(8)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-11 21:39:39 | 显示全部楼层
sunrise085 发表于 2020-9-11 20:21
想象力不够,就有笔头写一下啊。俗话说好脑子不如烂笔头
4的4次方太长了,给你写一下2的3次方吧

额 大佬您的意思是第一次执行是2*(2,3) 那问题是2*3得六啊。。。或者(2,3)不是乘法的意思??还是说先执行(2,3-1) 可这样第三次调用Y就已经是0了啊。。根本没有第四次调用。。还是不甚理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-11 21:49:11 | 显示全部楼层
2915658109 发表于 2020-9-11 21:39
额 大佬您的意思是第一次执行是2*(2,3) 那问题是2*3得六啊。。。或者(2,3)不是乘法的意思??还是说先执行( ...
第一次执行是2*(2,3) 那问题是2*3得六啊

这是什么鬼?
第一次执行到if语句块内的时候,是return 2*poe(2,2),哪儿来的2*3??
可这样第三次调用Y就已经是0了啊

你认真看我写的了吗?
第一次调用poe时,y=3;第二次调用poe时,y=2;第三次调用poe时,y=1;第四次调用poe时,y=0 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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