def fib(n, method = 4):
#树形递归
def fib_1(n):
print("method == 1")
if n <= 1:
return 1
else:
return fib_1(n-1)+fib_1(n-2)
#线形递归
def fib_2(n):
print("method == 2")
def fib_rec(a,b,n):
if n<= 1:
return 1
else:
return a + fib_rec(b, a+b, n-1)
#迭代循环
def fib_3(n):
print("method == 3")
a,b=1,1
for i in range(n):
_a,_b = b, a+b
a,b = a_,b_
return a
#尾递归
def fib_4(n):
print("method == 4")
def fib_iter(a,b,n):
if n == 0:
return a
else:
print(b,a+b,n-1)
return fib_iter(b,a+b,n-1)
return fib_iter(1,1,n)
print(method)
if method == 1:
return fib_1(n)
elif method == 2:
return fib_2(n)
elif method == 3:
return fib_3(n)
elif method == 4:
return fib_4(n)
if __name__ == '__main__':
print(fib(10,2))