def hexify(summ, l, count = 0):
if sum == 0:
return 1
for i in range(16):
if i < summ and l > 1:
count = hexify(summ-i, l-1)
elif i == summ and l > 0:
count = 1
return count
hexa = str(input())[2:] #input tag eg. 0x0121
summ = sum(int(digit, 16) for digit in hexa)
print(hexify(summ, len(hexa)) - 1)
此代碼的作用是查找其位數等于某個總和的 n 位十六進制數的數量。例如,如果給定的十六進制數是 0x12,則該函式將回傳 3(這意味著有 3 個十六進制數的數字總和為 3,不包括 0x12,即 0x03 0x30 和 0x21)。
問題是給定的約束是 1 > 1 > 10,一旦長度 l 超過 6,代碼就會停止運行。我該如何優化呢?(需要遞回)
uj5u.com熱心網友回復:
如果你想加速你的代碼,你可以使用快取裝飾器
@functools.cache(user_function) 簡單的輕量級無界函式快取。有時稱為“記憶”。
回傳與 lru_cache(maxsize=None) 相同的結果,為函式引數的字典查找創建一個瘦包裝器。因為它永遠不需要逐出舊值,所以它比具有大小限制的 lru_cache() 更小更快。
https://docs.python.org/dev/library/functools.html#functools.cached_property
from functools import cache
@cache
def hexify(summ, l, count = 0):
if sum == 0:
return 1
for i in range(16):
if i < summ and l > 1:
count = hexify(summ-i, l-1)
elif i == summ and l > 0:
count = 1
return count
hexa = str(input())[2:] #input tag eg. 0x0121
summ = sum(int(digit, 16) for digit in hexa)
print(hexify(summ, len(hexa)) - 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/443366.html
上一篇:在QDialog-PyQt5上回傳單擊的按鈕ID而不是(接受、拒絕標志)
下一篇:矩陣的最大成本
