鱼C论坛

 找回密码
 立即注册
查看: 1659|回复: 18

[已解决]Python 22课递归 动动手第二题 求运算过程和注释 3Q

[复制链接]
发表于 2018-2-17 11:39:49 | 显示全部楼层 |阅读模式

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

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

x
  1. def gcd(x, y):
  2.     if y:
  3.         return gcd(y, x%y)
  4.     else:
  5.         return x
  6.    
  7. print(gcd(4, 6))
复制代码


return gcd(y, x%y)求这句运算过程和注释 3Q
最佳答案
2018-2-17 14:05:41
def gcd(x, y):
    if y:
        return gcd(y, x%y)
    else:
        return x
   
print(gcd(4, 6))

gcd(4,6)
if 6:
return gcd(6,4%6)

gcd(6,4)
if 4:
retuen gcd(4,6%4)

gcd(4,2)
if 2:
return gcd(2,4%2)

gcd(2,0)

else:
return 2

gcd(2,0)=2

print(gcd(6,4)):经过迭代,返回2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-17 11:46:23 | 显示全部楼层
gcd(4,6) = gcd(6,4) = gcd(4,2) = gcd(2,0) = 2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-17 12:23:01 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-17 11:46
gcd(4,6) = gcd(6,4) = gcd(4,2) = gcd(2,0) = 2


新年快乐!!!
gcd(4,6) = gcd(6, 4%6)
             =gcd(6, 6%4) #这里 x , y 怎么就互换了(那句话阐述他们可以互换的)  我知道 欧几里得算法 那个                         t=x%y x=y y=t
            = gcd(4,2) #还有这里 函数里面剩下 4和2 了 然后 gcd(4,2) 怎么就又求余了 最开始没定义 公式在哪里 他俩咋就  辗转相除了  变成 结果  gcd(2,0) 了呢  这里 gcd(4,2)的时候  x==4 y==2 么  打印的return gcd(y, x%y)呢
            = gcd(2,0)
            = 2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-17 12:34:14 | 显示全部楼层
屁哥 发表于 2018-2-17 12:23
新年快乐!!!
gcd(4,6) = gcd(6, 4%6)
             =gcd(6, 6%4) #这里 x , y 怎么就互换了(那句 ...

我不知道是不是欧几里得算法,我从你的程序看出来就是这么算的。
递归函数就是调用自己来得出结果。
gcd(4,2) 返回的是 gcd(2,0), 里面的 y 是 0,所以运行的是
  1. else:
  2.         return x
复制代码

即返回 2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-17 12:50:10 From FishC Mobile | 显示全部楼层
如果y非0就一直取除x的余数互换,直到y等于0,反馈x
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-17 13:06:41 | 显示全部楼层
大头目 发表于 2018-2-17 12:50
如果y非0就一直取除x的余数互换,直到y等于0,反馈x


如果y非0就一直取除x的余数互换,直到y等于0,反馈x
这句红色的  一直取余数互换 怎么来的  是递归 还是函数 或者是其他的  那里能体现出他是互换的
再或者 我死记硬背 这个是死规矩?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-17 14:05:41 | 显示全部楼层    本楼为最佳答案   
def gcd(x, y):
    if y:
        return gcd(y, x%y)
    else:
        return x
   
print(gcd(4, 6))

gcd(4,6)
if 6:
return gcd(6,4%6)

gcd(6,4)
if 4:
retuen gcd(4,6%4)

gcd(4,2)
if 2:
return gcd(2,4%2)

gcd(2,0)

else:
return 2

gcd(2,0)=2

print(gcd(6,4)):经过迭代,返回2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-17 14:28:27 | 显示全部楼层
xiaozhouc 发表于 2018-2-17 14:05
def gcd(x, y):
    if y:
        return gcd(y, x%y)

请问 下面那个签名 学习很开心怎么设置的  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-17 14:31:02 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-17 11:46
gcd(4,6) = gcd(6,4) = gcd(4,2) = gcd(2,0) = 2

看到 7 楼的答案  知道 你这个怎么理解了 你的答案完全是对的  
但是对于我这种菜鸟 这把没理解明白 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-17 14:32:45 | 显示全部楼层
xiaozhouc 发表于 2018-2-17 14:05
def gcd(x, y):
    if y:
        return gcd(y, x%y)

秒懂  还是你体谅 初学者的 心情啊
非常感谢 有机会一起睡
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-17 14:40:06 | 显示全部楼层
xiaozhouc 发表于 2018-2-17 14:05
def gcd(x, y):
    if y:
        return gcd(y, x%y)

请问一下这个  代码怎么理解
  1. def power(x, y):
  2.     if y:
  3.         return x * power(x, y-1)
  4.     else:
  5.         return 1
  6.    
  7. print(power(2, 3))
复制代码


return x * power(x, y-1)  这句  第一次 return之后 x * power(2,3-1) ==  x * power(2, 2) 这里看明白了  函数 的变量 y 发生了变化 power(2, 2)
那 下面打印结果 怎么回事 函数变了  打印结果 怎么出现两个  x 相乘了   if y==2的时候
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-17 14:59:03 | 显示全部楼层
屁哥 发表于 2018-2-17 14:31
看到 7 楼的答案  知道 你这个怎么理解了 你的答案完全是对的  
但是对于我这种菜鸟 这把没理解明白 {:5 ...

不客气。是我太懒了,没写得那么细。主要我觉得都要说那么细的话,许多问题的答案就很长了,很浪费时间,比如小甲鱼的视频集数就可能翻一倍都还不够。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-17 15:19:51 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-17 14:59
不客气。是我太懒了,没写得那么细。主要我觉得都要说那么细的话,许多问题的答案就很长了,很浪费时间, ...

嗯 嗯  不管怎么说  非常感谢
我会努力的  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-19 18:52:38 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-17 11:46
gcd(4,6) = gcd(6,4) = gcd(4,2) = gcd(2,0) = 2

gcd(4,6) 怎么= gcd(6,4)了?   4%6怎么余4了   想不通。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-19 19:00:10 | 显示全部楼层
PYYP 发表于 2018-2-19 18:52
gcd(4,6) 怎么= gcd(6,4)了?   4%6怎么余4了   想不通。

4除以6的余数不是4吗? 4 - 6*0 = 4 啊,不能是 4-6*1 = -2 吧老哥?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-19 19:11:52 | 显示全部楼层
4余以6是大学算法吗?  可不可以系统性的教我除法概念,  4%6表达式为什么是   4-6*0   看不懂啊   老师   教教我
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-19 19:12:26 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-19 19:00
4除以6的余数不是4吗? 4 - 6*0 = 4 啊,不能是 4-6*1 = -2 吧老哥?

4余以6是大学算法吗?  可不可以系统性的教我除法概念,  4%6表达式为什么是   4-6*0   看不懂啊   老师   教教我
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-19 21:37:13 | 显示全部楼层
PYYP 发表于 2018-2-19 19:12
4余以6是大学算法吗?  可不可以系统性的教我除法概念,  4%6表达式为什么是   4-6*0   看不懂啊   老师  ...

求余 死记硬背  小的数 %(求余)大的数  除不开的 余数就取小的那个数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-19 23:46:13 | 显示全部楼层
屁哥 发表于 2018-2-19 21:37
求余 死记硬背  小的数 %(求余)大的数  除不开的 余数就取小的那个数

哦  谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-7 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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