2016-08-19 2 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ペニーを持っていて、それを2倍にすると結果はゼロペニーになります。 – Umubale

+0

アルゴリズムが正しいです。しかし、ゼロがあなたが望む結果でない場合、あなたはその質問を少し難しく思っているかもしれません。 – trentcl

答えて

0

の出力を引き起こしている: -

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 

そのベースケースが何を意味するかを理解することが有益。基本ケースは、再考が終了する必要がある条件が1つしかないことを意味しません。代わりに、それは再発が終結するべきときの可能な条件の1つであることを意味します。

これで、問題に2つの基本ケースがあることがわかります。

  1. 0日が経過している場合は1日が経過したとき、あなたは、あなたが二重入力のお金をお金
  2. を持っていませんでした。
  3. 日数が過ぎると、前日の2倍の金額になります。

上記の3つのケースをコードするには、if-elif -elseが必要です。

+0

あなたの修正案は同じです。 '0 * 2 == 0' – trentcl

+0

私はそれに答えると、質問のフォーマットが間違っていました。彼は0日のケースを「リターン0」にしたいと思っていました。 –

+0

日数が0でなくても、最初の提案は常にゼロを返します。おそらくあなたは 'num_pennies * 2'を意味していた – trentcl

0

あなたの基本ケースは正しくありません。あなたはゼロ日後にゼロのペニーを持っていない - あなたはあなたが始めたものを正確に持っています。

  • 1ペニーで始まります。ダブル3回。あなたは1 * 2 * 2 * 2 = 8ペニーです。
  • 1ペニーで始まります。ダブル2回あなたは1 * 2 * 2 = 4ペニーです。
  • 1ペニーで始まります。ダブル1回。あなたは1 * 2 = 2ペニーです。
  • 1ペニーで始まります。ダブル0回。 1ペニーがあります。

あなたのベースケースは本当に、単に

if num_days == 0: 
    return num_pennies 

全く0にtotal_penniesを初期化するか、する必要はありませんする必要があります。

関連する問題