我试着掌握列表的概念,这对我来说是新的:我只使用数组解决算法。 所以为了计算一个数字列表的总和,这段代码到底做了什么?
的伪代码:
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,但我仍然不明白它是如何进行的。
你能帮我理解吗?
答案 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
关键是伪代码以递归方式解决问题。