|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 mumudontcry 于 2014-8-4 18:40 编辑
第一行喂@小甲鱼
啦啦啦,隔了这么多天,有没有小伙伴们在想木木到底去哪里了么?肯定是没有人关注木木其实木木我发现,有可能是我……太快了,然后有些小伙伴跟不上,那些比木木快的,又比木木厉害很多,然后就不需要看我这样低端的帖子吧,而我又发现,你们的注意力好像都集中在我那个帖子里了——小甲鱼你是坏蛋有点小失望。说到底,可能是我讲的不好,那你们给点建议意见也好吧
昨天(额不,前天?whatever)是情人节,小甲鱼也说了,不要老是看小甲鱼的视频,要多出去走走,跟妹子交流,于是我这几天一直……待在家里玩萌妹子的手机游戏(啊,真正的萌妹子快快到我碗里来,木木会暖床会做饭会……好多好多)
好了,进入正题,这一讲讲的是:递归
递归有两个特点:
1、函数调用自身
2、设置了终止条件
由于这一讲只是“初遇”递归,所以,记住上面两个就行了
接下来是习题代码以及分析时间:
动动手
0
这是木木的代码:
def power(x,y):
if y == 0:
return 1
else:
return x * power(x,y - 1)
然后是小甲鱼的
def power(x, y):
if y:
return x * power(x, y-1)
else:
return 1
print(power(2, 3))
当然我的也是对的,起初,木木的是y ==1,因为想到比如2的3次方,只要3个2相乘就可以了,所以,让3到1就行,但是看完小甲鱼的答案才发现,其实……还有个0次方的情况!啊~~木木的疏忽
这两个程序其实可以说是一样的,只是条件和结果倒了过来,具体过程你们呢就用这个print拿张纸,按照小甲鱼ppt上的样子写下来就知道了
1
木木的:
def gcd(x,y):
if x > y and x % y != 0:
x = x % y
return gcd(y,x)
elif y > x:
t = y
y = x
x = t
return gcd(x,y)
else:
return y
小甲鱼的:
def gcd(x, y):
if y:
return gcd(y, x%y)
else:
return x
print(gcd(4, 6))
在我仔细看了小甲鱼的代码之后还是觉得小甲鱼错了,因为他都没有判断x和y的大小,怎么可以这样做呢?后来我试了这个之后,才发现,其实是木木数学没学好啊!
print(12 % 18)
print(18 % 12)
请问上面的输出分别是多少?
答案是12和6,下面的好理解,上面的呢?嗯……“%”的运算啊,小数%大数=小数%……这个小数不是指3.1415926,是指较小的数
那么,从代码来分析,如果x>y,那么肯定是return gcd(y,x % y),那要是y>x呢?
如果y大于x,那么x % y其实就是x,那么大家是否还记得这么一个语句:x,y = y,x,这个其实就是说,让x,y交换,其实就是木木上面写的elif那种样子
于是return gcd(y,x)给gcd(x,y)其实就是实现了上面的交换
在这里小甲鱼依旧是简单的if y,其实就是相当于判断x % y 是不是等于0,因为在后面的return里,有一个x % y,而if y里的y,其实就是x % y的结果,所以就是相当于 if x % y != 0
在这个程序里,木木对%理解不够,所以才会写那~~~么长一坨代码,但含义上来说,木木的比较好理解,也比较容易想到,所以当然大众化啦~所以说,木木还是战胜了小甲鱼,维护了地球和平!
ps:别听我瞎说,这就说明了一点,小甲鱼写的代码确实很多,知道很多关键的句子,其实写程序的话,大家都知道是这么一回事,但是真的写出来,有些人就是比你写的简洁,或者说写的快速,就是因为他不仅在程序上有学习,对一些数字啊,式子啊的理解也比别人好,所以,程序的话,木木会多多写,句子啊,多多记。从%也看得出来,木木基础不是很好,所以,建议各位还是多多看书,写程序,如果为了学程序而需要鱼币,结果却各种水,那就是舍本逐末,本末倒置的做法,你们可以像木木这样,把自己的经历当作笔记,而论坛这个平台就是笔记本一样,把学的,写上去,自己看,也给别人分享,让别人帮自己学习,同时又可以“骗”鱼币(我才不追求多少呢,可以把小甲鱼视频看完就够了),何乐而不为?
pps:各位鱼油有没有试过在两面镜子之间观察一支点燃的蜡烛呢?所谓的,没有终止条件的“递归”(这不是递归)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
点击
当没节操甲鱼遇上傲娇笨笨的木木
查看我的淘帖,喜欢就点“订阅”吧
|
|