计算数字列表的总和

时间:2015-01-28 22:50:06

标签: algorithm list

我试着掌握列表的概念,这对我来说是新的:我只使用数组解决算法。 所以为了计算一个数字列表的总和,这段代码到底做了什么?

的伪代码:

function listSum(intList:List):Integer
if isEmpty(rest(intList)) then
                listSum:=first(intList)
           else
                listSum:=first(intList) + listSum(rest(intList)) 
print(listsum([1,3,5,7,9]))

我看了this explanation,但我仍然不明白它是如何进行的。

你能帮我理解吗?

1 个答案:

答案 0 :(得分:1)

最好尝试逐行解释:

function listSum(intList:List):Integer
    if isEmpty(intList)
        then listSum:=first(intList)
    else
        listSum:=first(intList) + listSum(rest(intList))

print(listsum([1,3,5,7,9]))

此代码以递归方式传递数组以查找结果。

例如,假设您有以下数组:

[1,2,3,5]

当您将数组传递给函数时,它将检查数组是否为isEmpty。

不是这样,它会进入else块。

else块说“返回此列表中的第一项,加上列表的其余部分”。 “列表的其余部分”是通过将数组的其余部分传递给listSum函数来获得的。

更简洁的功能结果如下:

[1,2,3,5]
1 + [2,3,5]
1 + 2 + [3,5]
1 + 2 + 3 + [5]
1 + 2 + 3 + 5
1 + 2 + 8
1 + 10
11

关键是伪代码以递归方式解决问题。

More info on recursion here