2014-06-05 2 views
1

나는 재귀를 학습하고 있으며이 숫자를 하나의 숫자에서 선택한 숫자까지 모두 반환하는 코드를 작성했습니다. 프로그램을 실행할 때 처음 입력 한 숫자에 관계없이 그 값은 항상 "없음"이며, 이는 outputSum 변수의 값이 내 프로그램에서 "없음"인 것처럼 보임을 의미합니다. SUM_OF_NUMBERS의 초기화 된 값을 변경하면이 값이 변경 될 수 있다고 생각했지만, 그렇지 않은 경우 출력으로 '없음'을 여전히 얻었습니다. 아무도이 버그를 일으키는 내 코드에서 부분을 가리킬 수 있습니까? 입력이 0보다 클 때 당신은 아무것도 반환하지 된 이후Python의 합계로 "None"을 반환하는 재귀 숫자 합산 프로그램

def sumOfNumbers(number): 

    SUM_OF_NUMBERS = 0 

    if number > 0: 
     SUM_OF_NUMBERS = SUM_OF_NUMBERS + number 
    else: 
     return SUM_OF_NUMBERS 

    number = number - 1 

    sumOfNumbers(number) 

def main(): 

    repeat = 'Y' 
    outputSum = 0 

    while repeat == 'Y' or repeat == 'y':  
     print("Welcome to the Sum Of Numbers program!") 
     number = int(input("\nPlease enter a number to sum up: ")) 

     outputSum = sumOfNumbers(number) 

     print("\nThe sum of all numbers from 1 to " + str(number) + \ 
       " is " + str(outputSum)) 

     repeat = input("\nWould you like to sum up another number?" \ 
         '\nEnter "Y" for "YES" or "N" for "NO": ') 

     if repeat == 'N' or repeat == 'n': 
      print("\nThank you for using the program.") 
     else: 
      print("\nSorry, that was not a valid option.") 
      repeat = input('Please enter "Y" for "YES" or "N" for "NO": ') 

main() 

답변

2

당신은 None을 받고 있었다.

당신이 가진 것보다 훨씬 더 간단합니다.

def sumOfNumbers(number): 
    if number > 0: 
     return number + sumOfNumbers(number-1) 
    else: 
     return 0 
+0

가, 감사합니다. 입력이 0보다 클 때 아무것도 반환하지 않고 건너 뛰고 있다는 것을 알지 못했습니다. –

1
def sumOfNumbers(n): 
    if n>0: 
    return n+sumOfNumbers(n-1) 
    else: 
    return 0 

i = input("Enter a number") 
print "Sum of numbers:",sumOfNumbers(i) 
0

또는, 단지 경계 조건에 대한 사전 테스트 및 처리 (꼬리) 재귀,

def sumOfNumbers(number): 
    if number <= 0: return 0 
    return number+sumOfNumbers(number-1) 
0

당신의 논리는 소리입니다. 문제는 매번 SUM_OF_NUMBERS를 0으로 재설정했기 때문입니다. 또한 최종 반환 문을 잊었으므로 None을 반환합니다. 두 개의 작은 가지가 있습니다

def sumOfNumbers(number, SUM_OF_NUMBERS = 0): 

    if number > 0: 
     SUM_OF_NUMBERS = SUM_OF_NUMBERS + number 
    else: 
     return SUM_OF_NUMBERS 

    number = number - 1 

    return sumOfNumbers(number, SUM_OF_NUMBERS) 
+1

나는 그것이 버그라는 것을 알았고 매번 실행했을 때마다 0을 리턴 할 가능성이 높았지만 아무도 리턴하지 못해서 난처했다. 감사! –

0

:이 문제를 해결하려면, 같은 인수로에 전달할 수

  1. 함수는 아무것도에게 반환은
  2. SUM_OF_NUMBERS = 0 때마다 당신이 전화를 당신은 설정 기능.

그냥 여기에 짧은 코드를 단순화 :

훨씬 더 우아한 해결책을의
def recursive_sum(num): 
    if num == 0: 
    return 0 
    return num + recursive_sum(num-1) 
관련 문제