马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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. 总结: 关于迭代和递归的使用问题,个人认为,能用迭代实现的计算尽量用迭代;鉴于递归的执行效率问题,要用于该用的地方(好像是废话哈,嘿嘿)。
|