# Python 用非递归解决cow问题
其实本题原理和斐波拉西数列基本一致,就拿斐波拉西数列来说:
fib = [1、1、2、3、5、8、13、21、34、……]
从这上面来可以看出:
除了fib[0]和fib[1]之后的数都是由前面两个数相加而成,即fib[i] = fib[i-1] + fib[i-2]
而,列出cow问题的数列cow = [1,2,3,4,6,9,13……]
类似的可以看出:
除开cow[0],cow[1],cow[2],cow[3]之后都有cow[i] = cow[i-1] + cow[i-3]
所以可由两种方式解决此问题:
1、递归函数
2、非递归而直接一步到位
又因为Python运算速度较慢,递归函数所用时间较长,采用非递归方式:
代码如下:
`
def cow(n):
middle = [2,3,4]
if n == 1:
return 1
elif n == 2:
return 2
elif n == 3:
return 3
elif n == 4:
return 4
else:
for each in range(5,n+1):
middle.append(middle[0] + middle[2])
middle.pop(0)
return middle[2]
if __name__ == "__main__":
put = []
while True:
n = int(input())
if n == 0:
break
put.append(n)
for each in put:
print(cow(each))`
觉得不错的朋友可以评价一下,感谢。
0.0分
4 人评分