# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
f=0
g=1
while n:
g=g+f
f=g-f
n=n-1
return f
如果是教科书式的写法,会写成递归的形式
if n<=1:return n
else: return f(n-1)+f(n-2)
但是递归有深度限制,所以采用循环的形式,需要设置两个变量来记录前两个数来计算当前的数,f和g相当于数列中的两个游标,每次循环先计算当前数g然后再另f后移到之前g的位置,由于g已经后移了,所以需要f=g-f。
剑指offer上类似的斐波那契数列问题还有跳台阶:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
考虑青蛙最后跳到终点的方式,可以跳一级或两级,每一项都是前两项的加和,也是斐波那契的形式。