2014-04-27 69 views
0

我想創建一個程序,它接受用戶整數輸入,創建一個列表,然後使用遞歸 添加列表。問題是當我輸入6時出現了15,而 的答案應該是(0 + 1 + 2 + 3 + 4 + 5 + 6)= 21。爲什麼數學是錯誤的?我想,那一定是在某處索引,因爲如果你省略了6你得到15Python - 創建一個整數列表並使用遞歸來添加它們

#Program which accepts a number from the user 
#take the numbers 0 to the number input 
#and gives a total of the numbers 

def main(): 
#Get the number from the user to define upper end of range 
    num = int(input('Enter a non-negative integer: ')) 

#Create the list of numbers 
numbers = list(range(0,num, 1)) 

#Get the sum of the list of numbers 
my_sum = range_sum(numbers, 0, - 1) 

#Display the total 
print('The sum of 0 to', num, 'is: ', my_sum) 

def range_sum(num_list, start, end): 
if start < end: 
    return 0 
else: 
    return sum(num_list) 
#call the main function 
main() 
+1

您應該修復縮進。 'list(range())'應該縮短爲只使用'range()'。 – jorgenkg

+0

另外,'range(0,num,1)'只是'range(num)' – jonrsharpe

+0

查看'numbers'中的數字。是否真的如你所期望的那樣,然後查看「範圍」的文檔以查明原因。 – Daniel

回答

0

使用尾遞歸:

def range_sum(nums, sum=0): 
    if not nums: 
     return sum 
    sum += nums.pop() 
    return range_sum(nums, sum) 
+0

我改變了我的代碼如下,但它仍然給我一個15的回答,當我輸入6時它應該給我21 #從用戶獲取數字來定義範圍的上限 \t NUM = INT(輸入( '輸入一個非負整數:')) \t #創建數字 \t號碼=列表(範圍(0,NUM,1)) #獲取的總和的清單(:,my_sum '爲0〜總和',NUM, '是') DEF range_sum(NUM,總和號碼 \t my_sum = range_sum(數字) #Display總 \t打印的列表= 0): if not num: return sum sum + = num。pop() return range_sum(num,sum) – Maggi3339336

+1

@ Maggi3339336你還在使用'range(n)'而不是'range(n + 1)'嗎? [RTFM](https://docs.python.org/2/library/functions.html#range)。 – jonrsharpe

+0

也許我很困惑。你在說什麼範圍(n + 1) – Maggi3339336

0

這是一個相對簡單的函數來實現遞歸兩種:

def recursive(n): 
    if n == 1: 
     return n 
    return n + recursive(n - 1) 

或迭代:

def iterative(n): 
    return sum(range(n + 1)) # note n + 1 - range excludes the stop argument 

這相當於:

def iterative_longhand(n): 
    total = 0 
    for i in range(n + 1): 
     total += i 
    return total 

,或者,如果一個列表是必要的:

def recursive_list_sum(nums): 
    if nums: 
     return nums[0] + recursive_list_sum(nums[1:]) 
    return 0 

recursive_list_sum(list(range(n + 1))) 

你的標題說,「使用遞歸」,但沒有你的函數調用自己。您正在使用遞歸既不構建列表也不添加其內容。這個功能:

def range_sum(num_list, start, end): 
    if start < end: 
     return 0 
    else: 
     return sum(num_list) 

叫這樣的:

range_sum(numbers, 0, - 1) 

只是sum(num_list),爲start > end。目前還不清楚你想要實現什麼 - 如果它是遞歸的,應該在其中調用range_sum

+0

正如我所說,我要求用戶給我一個數字,即6。然後,我需要創建一個列表,所有的數字直至幷包括6.即0,1,2,3,4,5,6 。使用一些遞歸方法將所有數字加起來並給出答案。 – Maggi3339336

+0

我已經添加了遞歸列表版本 – jonrsharpe

0

有一個在代碼中沒有遞歸調用。你正在使用sum函數,它是用Python定義的。

相關問題