python就餐問題

小明受邀參加朋友的晚會Part,形式爲自助餐,已經目前有N種食物編號1-N依次擺放在一行,小明可以從中挑選食物,但必須符合以下條件
如果選中了某個編號爲X的食物,則兩邊的食物不能選中(即x-1,x+1的食物不能選)
小明可以選擇任意個食物
小明有多少個選擇?

choice_food.py

"""
方法1:
n = int(input())
num = [0] * (n + 1) 
num[1] = 2 
num[2] = 3 
for i in range(3, n+1):
    num[i] = num[i-1] + num[i-2]
print(num[n])
"""


from functools import wraps


def cache(func):  # 裝飾器
    store = {} # 外部變量

    @wraps(func)
    # 按照習慣,有時候單個獨立下劃線是用作一個名字,來表示某個變量是臨時的或無關緊要的
    def _(n):  # 閉包函數
        if n in store:
            return store[n]
        else:
            res = func(n)
            store[n] = res
            return res
    return _


@cache
def get_choices(num):
    if num <= 1:
        return num + 1
    return get_choices(num - 1) + get_choices(num - 2)


if __name__ == '__main__':
    food_num = input()
    print(get_choices(int(food_num)))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章