2014-04-27 174 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定义的。

相关问题