斐波那契数(python)
def f(x):
if x ==0 or x == 1:
return 1
else:
return f(x-1)+f(x-2)
@cal_time #装饰器 确定运行时间
def fib(n):
return f(n)
print(fib(30))
#给递归函数加装饰器,会出现重复打印
#重新定义一个函数,调用,这样就不会重复打印
fib running time: 0.2029705047607422 secs.
1346269
@cal_time
def f1(n):
l = [1,1]
for i in range(2,n+1):
l.append(l[-1]+l[-2])
return l[n]
print(f1(5))
f1 running time: 0.0 secs.
8
@cal_time
def f2(n):
a, b, c = 1, 1, 1
for i in range(2,n+1):
c = a + b
a = b
b = c
return(c)
print(f2(5))
f2 running time: 0.0 secs.
8
#确定运行时间
import time
def cal_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
print("%s running time: %s secs." % (func.__name__, t2 - t1))
return result
return wrapper
一段有n个台阶组成的楼梯,小明从楼梯的最底层向最高处前进,它可以选择一次迈一级台阶或者一次迈两级台阶.问:他有多少种不同的走法?
#从1 开始的斐波那契数列,1,2,3,5,8,13...
def taijie(n):
a = 1
b = 2
c = 0
for i in range(3,n+1):#从1开始
c = a + b
a = b
b = c
return c
print(taijie(5))