我試圖來解決CodeChef這個問題:http://www.codechef.com/problems/COINS我的短遞歸函數花費太長時間執行,如何優化它
但是,當我提出我的代碼,它顯然需要很長時間來執行,並說時間已過。我不確定我的代碼效率低下(看起來對我而言不是這樣)還是I/O遇到問題。有一個9秒的時間限制,來解決最大值10級的輸入,0 < = N < = 1個000 000 000
在Byteland它們具有非常奇怪的貨幣系統。
每個Bytelandian金幣都寫有一個整數。硬幣 n可以在銀行兌換成三個硬幣:
n/2
,n/3
和n/4
。但是這些數字全部下調(銀行必須盈利)。您還可以出售美元的Bytelandian硬幣。交易所 匯率爲1:1。但你不能購買Bytelandian硬幣。
你有一枚金幣。您可以獲得的最高金額是多少美元 ?
這裏是我的代碼:這似乎花費太長的時間爲1 000 000 000
def coinProfit(n):
a = n/2
b = n/3
c = n/4
if a+b+c > n:
nextProfit = coinProfit(a)+coinProfit(b)+coinProfit(c)
if nextProfit > a+b+c:
return nextProfit
else:
return a+b+c
return n
while True:
try:
n = input()
print(coinProfit(n))
except Exception:
break
另外,如果我說我的功能的複雜性將增長三個冪,我是否正確?即,最壞的情況是3^log_4(n)? – user50449
我敢打賭輸入()是你的瓶頸。但1G的9秒是相當不錯的時間。 – Anonymous
這個程序永遠不會退出,while循環會一直持續請求更多的輸入。我錯過了什麼嗎? – superultranova