2016-08-19 57 views
0
''' Returns number of pennies if pennies are doubled num_days times''' 
def double_pennies(num_pennies, num_days): 
    total_pennies = 0 

    if num_days == 0: 
     return total_pennies 

    else: 
     total_pennies = double_pennies((num_pennies * 2), (num_days - 1)); 

    return total_pennies 

''' Program computes pennies if you have 1 penny today,''' 
''' 2 pennies after one day, 4 after two days, and so on''' 
starting_pennies = 1 
user_days = 10 

print('Number of pennies after', user_days, 'days: ', end="") 
print(double_pennies(starting_pennies, user_days)) 
+1

如果你有1便士,並且你把它加倍0次,你有多少便士? – trentcl

+0

@trentcl,如果我有1便士並將其加倍0倍,那麼結果爲零便士。 – Umubale

+0

然後該算法是正確的。但是,如果零不是你想要的結果,你可能想要考慮這個問題有點困難。 – trentcl

回答

0

輸出添加ELIF像這樣: -

total_pennies = num_pennies 

if num_days == 0: 
    return total_pennies # or if you want return 0 
elif (num_days == 1): 
    return total_pennies * 2 
else: 
    total_pennies = double_pennies((num_pennies * 2), (num_days - 1)); 

return total_pennies 

它的啓發,瞭解基本情況是什麼意思。基本案例並不意味着只有一個條件,當recusion應該終止;相反,這意味着這是可能的結束條件之一。

有了這個,你可以看到你的問題有兩個基本情況。

  1. 0時天過去了,你有沒有錢
  2. 1時一天又過去了,你有雙輸入的錢。
  3. 如果有更多的天數過去了,你的錢就比前一天增加了一倍。

所以你看到要編碼上述3種情況,你需要一個if - elif-else。

+0

您建議的更正是相同的。 '0 * 2 == 0' – trentcl

+0

當我回答時,問題的格式很差。在我看來,他希望0天案例是一個「返回0」。 –

+0

即使非零天數,您的第一個建議仍會始終返回零。可能你的意思是'num_pennies * 2' – trentcl

0

您的基本情況不正確。零日後你沒有零便士 - 你剛開始的時候就是這樣。

  • 從1便士開始。加倍3倍。你有1 * 2 * 2 * 2 = 8便士。
  • 從1便士開始。加倍2倍。你有1 * 2 * 2 = 4便士。
  • 從1便士開始。把它加倍一次。你有1 * 2 = 2便士。
  • 從1便士開始。加倍0倍。你有1便士。

你的基本情況應該僅僅是

if num_days == 0: 
    return num_pennies 

無需初始化total_pennies爲0,或者在所有的,真的。

相關問題