马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 醉酒青牛 于 2015-10-11 14:10 编辑
小牛有话说:
各位鱼油,大家好。我是小牛,如果您已经看完或者正在看鱼神的《零基础入门学习Python》视频,想随时复习前面的知识点却又不想花太多时间和精力重翻视频,来这里《零基础入门Python学习》整理瞅瞅小牛呕心做的的视频内容的总结吧^_^,如果觉得有用的话,可以点击帖子右上角的“订阅”按钮,这样以后就能够随时看到小牛做的最新的整理了。
另外,小牛十一回了趟家,结果就将更新耽搁了,这里对关注小牛帖子鱼油们说声抱歉了,后面小牛会尽力加快更新速度,争取在10月底更新到类和对象部分。
本期主要内容导读:
这一期我们归纳一下鱼神第二十三讲“递归:这帮小兔崽子”。这一期里面鱼神主要是根据生小兔子故事讲解了斐波那契数列采用递归方法的实现过程,并对比了采用迭代方法实现优缺点,最后再次声明了正确使用递归的重要性。下面我们就来详细介绍一下各个知识点吧~~~~~~
1. 斐波那契数列的规律
这里,小兔子每月的总对数呈斐波那契数列形式,具体为:
所经月数 1 2 3 4 5 6 7 8 9 10 11 12
兔子总对数 1 1 2 3 5 8 13 21 34 55 89 144
将兔子总对数与所经月数n的关系转换为数学公式则为:
1 n = 1
F(n) = 1 n = 2
F(n-1) + F(n-2) n > 2
其中n属于整数。
2. 采用递归方法实现经20个月之后的兔子总对数值def fab(n): #定义函数,参数为月数,通过递归实现对应的兔子总对数
if n < 1: #n值小于1时则提示‘输入错误’并返回-1
print('输入有误!')
return -1
if (n == 1) or (n == 2):#月数为1或2时返回值都为1
return 1
else:
return fab(n-1) + fab(n-2) #月数大于2时,则返回月数减一和减二对应的兔子总数量之和
result = fab(20) #输入月数为20时计算兔子总对数
if result != -1:
print('经过20个月产生的兔子总对数为%d!' %result)
3. 采用迭代方法实现经20个月之后的兔子总对数值def fab(n): #定义函数,参数为月数,通过迭代实现对应的兔子总对数
n1 = 1
n2 = 1
n3 = 1
if n < 1: #n值小于1时则提示‘输入错误’并返回-1
print('输入有误!')
return -1
while(n-2) > 0: #月数大于2时,则进行循环
n3 = n1 + n2 #n3为n1和n2之和
n1 = n2 #将n2值赋给n1
n2 = n3 #将n3值赋给n2
n -= 1 #n自减一
return n3
result = fab(20) #输入月数为20时计算兔子总对数
if result != -1:
print('经过20个月产生的兔子总对数为%d!' %result)
3. 正确使用递归方法意义
递归方法是一个双刃剑,用好了能解决很棘手的问题,例如汉诺塔游戏的解法实现,而用不好将会使得程序执行效率降低,例如上述实现斐波那契数列方法中,如果月数为35,则采用递归程序计算起来就慢多了,而迭代则瞬间计算完,虽然递归书写代码很简洁。 |