鱼C论坛

 找回密码
 立即注册
查看: 1594|回复: 13

[已解决]关于第022讲的递归问题

[复制链接]
发表于 2017-5-21 03:45:20 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 7728821314502 于 2017-5-21 04:08 编辑

def power(x, y):                          程序的流程: power(2,3)
    if y:                                                               power(2,2)
        return x * power(x, y-1)                          power(2,1)                                                  
    else:                                                            power(2,0) 之后 因为 y = 0  return 1    程序不是该结束了吗
        return 1                                                                                                                
                                                                                 
print(power(2, 3))                                                   程序怎么还在运行 最后结果是 8?

                                                                                  程序接下来是怎么运行的???


                                                                                求科普                                                                                                
最佳答案
2017-5-21 15:42:42
7728821314502 发表于 2017-5-21 14:17
就是逆推赋值不会  

程序是这样执行的
power(2,3)=2*power(2,2)
                       power(2,2)=2*power(2,1)
                                              power(2,1)=2*power(2,0)
                                                                     power(2,0)=1

因为除了power(2,0)=1直接输出结果,其他都需要函数自身循环,
所以,power(2,1)、power(2,2)、power(2,3)的计算方式是放缓存中,等得到等式右边都是具体数字,才进行赋值。
所以程序执行和赋值是相反的顺序,即逆推赋值,在计算机眼里是这样进行的:
          power(2,0)=1
          power(2,1)=2*power(2,0)=2*1
          power(2,2)=2*power(2,1)=2*(2*1)
          power(2,3)=2*power(2,2)=2*(2*(2*1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-21 12:28:33 | 显示全部楼层
没错呀 你前面解释的没错
程序是这样执行的
power(2,3)=2*power(2,2)
                       power(2,2)=2*power(2,1)
                                              power(2,1)=2*power(2,0)
                                                                     power(2,0)=1
至于循环,你应该看的懂吧
这样瀑布模型 依次逆推赋值,就得到power(2,3)的结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-21 14:17:06 | 显示全部楼层
本帖最后由 7728821314502 于 2017-5-21 14:32 编辑
21度深蓝梦境 发表于 2017-5-21 12:28
没错呀 你前面解释的没错
程序是这样执行的
power(2,3)=2*power(2,2)


就是逆推赋值不会  



def gcd(x, y):
    if y:
        return gcd(y, x%y)
    else:
        return x
   
print(gcd(4, 6))

这题 gce(6,4)
        gcd(4,2)
        gcd(2,0)
        因为 y = 0:   return 2
       后面是怎么怎么逆推(也就是说递归是怎么返回)的?
      视频里只有一个参数的很容易明白
       这2题就完全不明白是怎么  返回去的
           
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-21 15:42:42 | 显示全部楼层    本楼为最佳答案   
7728821314502 发表于 2017-5-21 14:17
就是逆推赋值不会  

程序是这样执行的
power(2,3)=2*power(2,2)
                       power(2,2)=2*power(2,1)
                                              power(2,1)=2*power(2,0)
                                                                     power(2,0)=1

因为除了power(2,0)=1直接输出结果,其他都需要函数自身循环,
所以,power(2,1)、power(2,2)、power(2,3)的计算方式是放缓存中,等得到等式右边都是具体数字,才进行赋值。
所以程序执行和赋值是相反的顺序,即逆推赋值,在计算机眼里是这样进行的:
          power(2,0)=1
          power(2,1)=2*power(2,0)=2*1
          power(2,2)=2*power(2,1)=2*(2*1)
          power(2,3)=2*power(2,2)=2*(2*(2*1))

评分

参与人数 1荣誉 +2 鱼币 +5 贡献 +1 收起 理由
7728821314502 + 2 + 5 + 1

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-5-21 16:04:47 | 显示全部楼层
本帖最后由 7728821314502 于 2017-5-21 16:30 编辑
21度深蓝梦境 发表于 2017-5-21 15:42
程序是这样执行的
power(2,3)=2*power(2,2)
                       power(2,2)=2*power(2,1)


放在缓存中
也就是说                
def gcd(x, y):
    if y:
        return gcd(y, x%y)
    else:
        return x
   
print(gcd(4, 6))

gcd(6,4)
gcd(4,2)
gcd(2,0)

return 2
缓存中的
gcd(2,0) return 2
gcd(4,2) return 2
gcd(6,4) return 2
所以 gcd(4,6)
结果是  2    我的理解有没有错????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-19 15:25:11 | 显示全部楼层

回帖奖励 +3 鱼币

刚学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-19 16:46:01 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-19 16:46:33 | 显示全部楼层

回帖奖励 +3 鱼币

没得到鱼币。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-19 20:05:48 | 显示全部楼层
555
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-19 20:06:20 | 显示全部楼层

回帖奖励 +3 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2018-9-21 13:22:03 | 显示全部楼层

回帖奖励 +3 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-20 10:07:41 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-24 16:28:33 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-24 16:30:32 | 显示全部楼层

回帖奖励 +3 鱼币

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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