话不多说直接上代码
class Stack(list):
pass
def fib_prefer(n):
stack = Stack() # 初始化一个空栈
# 先向栈中插入两个离n最近的数, down 时代表第几个斐波那契数 up 表示某个位置斐波那契的值
stack.append((n - 1, 'down'))
stack.append((n - 2, 'down'))
last_down = 2 # 记录位置
fib_map = {
1: 1, 2: 1} # 缓存列表
while len(stack) > 1:
# print(stack, last_down, fib_map) # 帮助理解运行过程每一步的变化
cur_num, cur_direction = stack