|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
出自22讲的递归作业 完全。。看不懂。。。
4 6赋值给x,y 然后返回一个把x赋值给y, x求余y赋值给y的自己 然后......啥??
普通的用循环也能解决这个问题...吧? 顺带视频里的叠罗汉也是“原来如此,不懂。”的状态..
1. 使用递归编写一个函数,利用欧几里得算法求最大公约数,例如 gcd(x, y) 返回值为参数 x 和参数 y 的最大公约数。
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))
本帖最后由 yongxi 于 2017-7-12 00:51 编辑
始终你要明白。 gcd(x,y)有两个形参,就是x和y 无论怎么变, 第一个形参是x 第二个形参是y
gcd(y,x%y) 就是把y赋值给形参x 把x%y赋值给形参y
if y 的意思就是 只要y不为0 就一直递归 那么就是把上一次得到的 y 和 x%y作为形参调用函数本身
就这么一直循环,一直循环~~
直到y等于0了。 就执行else return 形参x
循环也是可以解决的,但是你没发现这个题目用递归就这么几句代码就搞定了,你用其他循环就显得麻烦了么?
总体来说就是用参数的运算作为参数再调用本身 这是最基本最简单的递归
对于递归你要学会逆向思维和逻辑想象
这还是一个最简单的例子,还有更烧脑的递归。
抽象的东西,就得靠你自己去想明白。比如我懂我知道,我按照自己的理解给你说,打了这么多字你也未必懂。自己加油思考吧。
最后再说一次小甲鱼老师的话,递归的本质就是无限调用函数本身,直到达到你设置的停止条件,然后返回。
|
|