问题遇到的现象和发生背景
做python入门技能树题目时,无法理解代码是如何实现的
https://edu.csdn.net/skill/practice/python-3-9/239
我不理解cache是怎样存入字典的,并且为什么是key能从3开始。
我希望能够理解的代码
def fibonacci_inner1(n, cache):
if n == 1 or n == 2:
return 1
if cache.get(n) is not None:
return cache[n]
else:
cache[n] = fibonacci_inner1(n-1, cache) + fibonacci_inner1(n-2, cache)
return cache[n]
def fibonacci1(n):
print(fibonacci_inner1(n, {}))
运行结果及报错内容
为了能够知道这段代码如何运行,我把过程print出来了,标记为:
if cache.get(n) is not None:
print("01 Part", cache)
return cache[n]
else:
cache[n] = fibonacci_inner1(n-1, cache) + fibonacci_inner1(n-2, cache)
print("02 Part", cache)
return cache[n]
计算fibonacci1(5)运行结果则是:
02 Part {3: 2}
02 Part {3: 2, 4: 3}
01 Part {3: 2, 4: 3}
02 Part {3: 2, 4: 3, 5: 5}
5
我的解答思路和尝试过的方法
最初的{}因为get()而返回None,于是开始计算cache[n] = fibonacci_inner1(n-1, cache) + fibonacci_inner1(n-2, cache),可是在第一次运算时,fibonacci_inner1(n-1, cache)中的cache值是什么?
而且最开始给n赋值为5,但第一个蹦出的结果却是cache[3] = 2,这个键值对是怎么来的呢?
我想要达到的结果
希望能好心解释一下逻辑过程,我知道能from functools import lru_cache,但对于上述问题无法释怀。