2016-06-13 2 views
0

私は比較的一般的なコーディングには新しく、Project Eulerを開始してコーディングを少し進めました。自分自身で最初の質問をどうやって作業するか考えて、再帰関数を使ってみましたが、残念なことに常に同じミスを繰り返していました。(266333)私は何を取りこぼしたか?学ぶべき大きな間違い?プロジェクトオイラー - #1 Pythonの間違った解決策

元の質問は、読み取ります。「私たちは3または5の倍数である10以下のすべての自然数を一覧表示する場合は、我々はこれらの倍数の和が23

検索で3、5、6と9を取得します1000以下の3または5の倍数の合計です。私は3の倍数の和である、hは5の倍数の和である場合には、jは3であり、kの倍数である

def function(i, j, h, k): 
    if j < 1000 and k < 1000: 
     i = i + j 
     h = h + k 
     return function(i, j+3, h, k+5) 
    elif j < 1000 and k >= 1000: 
     i = i + j 
     return function(i, j+3, h, k) 
    elif j >= 1000 and k < 1000: 
     h = h + k 
     return function(i, j, h, k+5) 
    else: 
     print (i + h) 


function(0,0,0,0) 

あなたが数字を含めていること5.

+0

一般的な変数名は、このコードを非常に理解しにくいものにします。 「i」、「j」、「h」、「k」とはどういう意味ですか? – Blckknght

+0

再帰を使用することは必須です。問題へのリンクを投稿してください。 – wind85

答えて

1

あなたの間違いの倍数になっていますかつて3の倍数として、そして一度何が価値がある5.

の倍数として、ここではこの合計を計算する簡潔な方法です::二回15で割り切れる

sum(i for i in range(1000) if not (i % 3 and i % 5)) 
+0

はい私は正しい答えを得ました。私は最初のif文で共通の倍数をチェックして解決しました。 \t 'J%5 == 0の場合:この質問を始めたときに \t \tリターン機能(I、J + 3、H、K)実際に私が理解するためにはるかに簡単である' – Vaan616

0

私は強くお勧めしますr少数のために働くかもしれないが大きいもののために働くことができないので、ソリューションが機能するかもしれないとしても、あなたに間違ったアプローチを教えてくれるでしょう。

def euler_1(sum, range_beg, range_end): 
    for number in range(range_beg, range_end): 
     if ((number % 3) == 0) or ((number % 5) == 0): 
      sum += number 
     else: 
      pass 

    return sum 


print(euler_1(0, 0, 1000)) 

これは、より多くのpythonic、再利用可能、より速く、より簡単で読みやすく、修正します。

+0

は、弾性率は完全に私の心をスキップ。どうもありがとうございました! – Vaan616

関連する問題