2016-06-13 3 views
0

저는 일반적으로 코딩에 비교적 익숙하며 프로젝트 오일러를 시작하여 코딩을 좀 더 발전 시켰습니다. 나 자신의 첫 번째 질문을하는 법을 생각하면서 재귀 함수를 사용해 보았지만, 불행히도 항상 같은 실수를 저 지르게되었습니다. (266333) 내가 놓친 게 무엇입니까? 배울 큰 실수?Project Euler - # 1 Python wrong solution

원래의 질문을 읽습니다 : "우리가 3 또는 5의 배수가 10 이하의 모든 자연수를 나열하면, 우리는 이러한 배수의 합은 23

찾기 3, 5, 6, 9를 얻을 수 1000 이하의 3 또는 5의 모든 배수의 합계입니다. "

i가 3의 배수의 합이
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) 

, h는 5의 배수의 합이며, j는 3의 배수와 K 것은 당신의 실수는 당신이 번호를 포함한다는 것이다 5.

+0

일반 변수 이름으로 인해이 코드를 이해하기가 어렵습니다. 'i','j','h' 및'k'는 무엇을 의미합니까? – Blckknght

+0

재귀를 사용하는 것이 필수적입니다. 문제의 링크를 게시 하시겠습니까? – wind85

답변

1

의 배수입니다 (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

것은 내가 강력히 권장 것 : 일단 3의 배수로서, 그리고 한 번 가치가 무엇 5.

의 배수로, 여기 합계를 계산 간결한 방법이있다 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)) 

이 더 파이썬, 재사용, 빠르고 간단 읽고 올바른 것입니다.

+0

는, 계수는 완전히 내 마음을 건너 뜁니다. 고마워요! – Vaan616