斐波那契数列python递归 0、1、1、2、3_python 高效递归斐波那契数列

1.python 线性递归斐波那契数列

def fib(n):

if n < 3:

return 1, 1

else:

a, b = fib(n - 1) # 最重要一步,每次取两个值

return a + b, a

t1 = time.time()

for i in range(100):

a,b = fib(i)

print(a)

print('执行时间: ' ,time.time()-t1)

输出:

1

1

1

2

3

5

8

13

21

34

55

89

144

233

377

610

987

1597

2584

4181

6765

10946

17711

28657

46368

75025

121393

196418

317811

514229

832040

1346269

2178309

3524578

5702887

9227465

14930352

24157817

39088169

63245986

102334155

165580141

267914296

433494437

701408733

1134903170

1836311903

2971215073

4807526976

7778742049

12586269025

20365011074

32951280099

53316291173

86267571272

139583862445

225851433717

365435296162

591286729879

956722026041

1548008755920

2504730781961

4052739537881

6557470319842

10610209857723

17167680177565

27777890035288

44945570212853

72723460248141

117669030460994

190392490709135

308061521170129

498454011879264

806515533049393

1304969544928657

2111485077978050

3416454622906707

5527939700884757

8944394323791464

14472334024676221

23416728348467685

37889062373143906

61305790721611591

99194853094755497

160500643816367088

259695496911122585

420196140727489673

679891637638612258

1100087778366101931

1779979416004714189

2880067194370816120

4660046610375530309

7540113804746346429

12200160415121876738

19740274219868223167

31940434634990099905

51680708854858323072

83621143489848422977

135301852344706746049

218922995834555169026

执行时间: 0.0

2.为了只返回一个数,加装饰器改进

import time

#装饰器函数

def dec_fib(func):

tmp = None

def dec_inner(n):

nonlocal tmp

if tmp is None:

tmp = 0 # 用来确认第一次调用fib().

if n > 0 and type(n) is int:

return func(n)[0]

else:

print('输入的数必须为正整数!')

else:

return func(n)

return dec_inner

@dec_fib

def fib(n):

if n < 3:

return 1, 1

else:

a, b = fib(n - 1) # 最重要一步,每次取两个值

return a + b, a

t1 = time.time()

print(fib(100))

print('执行时间: ' ,time.time()-t1)

输出:

354224848179261915075

执行时间: 0.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值