|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
解决著名的斐波那契数列问题:用迭代和递归两种方法
0. 数学描述 为一个分段函数
1 n=1
F(n)= 1 n=2
F(n-1)+F(n-2) n>2
1. 迭代法实现(跟小甲鱼实现方法不同)
- # 这帮小兔崽子 迭代实现法
- def fab_1(m):
- f1=1
- f2=1
- f3=1
- if m<1:
- print('error!')
- return -1
- elif m == 1:
- return f1
- elif m == 2:
- return f2
- else:
- for i in range(3,m+1):
- f3=f1+f2
- f1=f2
- f2=f3
- return f3
- months = int(input("请输入你想的时间,多少个月:"))
- result = fab_1(months)
- print('%d个月后小兔崽子共%d对' % (months,result))
复制代码
2. 用递归法实现
- # 用递归进行小兔崽子的计算
- def fab_2(m):
- if m<1:
- print('error!')
- return -1
- else:
- if m == 1 or m == 2:
- return 1
- else:
- return fab_2(m-1)+fab_2(m-2)
- monthes = int(input('请输入月数:'))
- result = fab_2(monthes)
- print('%d 个月后会有 %d对小兔崽子' % (monthes,result))
复制代码
3. 小甲鱼使用迭代法的实现过程:采用倒着推的while循环。
- #采用迭代方法实现经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)
复制代码
4. 总结: 关于迭代和递归的使用问题,个人认为,能用迭代实现的计算尽量用迭代;鉴于递归的执行效率问题,要用于该用的地方(好像是废话哈,嘿嘿)。
|
评分
-
查看全部评分
|