最佳答案
正如标题所解释的,我有一个非常基本的编程问题,我只是还不能理解。过滤掉所有的(非常聪明的)“为了理解递归,你必须首先理解递归。”各种在线帖子的回复我还没有完全理解。
了解到当面对不知道我们不知道的事情时,我们可能倾向于问错误的问题或者错误地问正确的问题。我将分享我的“想法”我的问题是希望有一个类似的观点的人可以分享一些知识,这将有助于为我打开递归灯泡!
下面是函数(语法是用 Swift 编写的) :
func sumInts(a: Int, b: Int) -> Int {
if (a > b) {
return 0
} else {
return a + sumInts(a: a + 1, b: b)
}
}
我们将使用2和5作为我们的论点:
println(sumInts(a: 2, b: 5))
答案显然是14,但我不清楚这个价值是如何实现的。
这是我的两个问题:
该函数将被递归调用,直到满足一个条件为止。这个条件是 a > b。当满足此条件时,返回0。乍一看,我希望返回值为0,这显然是不正确的。
Printing out the value of 'a' on each iteration yields a value which I would expect: 2, 3, 4, 5 (at which point 5+1 > b which meets the first condition: a > b) but I still don't see how the value of 14 is achieved.
我的第一个想法是,类似于下面这样的事情正在神奇地发生:
var answer = a;
answer += a+1 until a > b;
return answer;
所以排除魔法的可能性,我什么都得不到。我很想知道到底发生了什么,而不仅仅是含蓄的。
如果有人能好心地解释一下这种函数在技术上发生了什么,为什么结果不是0,以及最终 a + sumInts(a: a + 1, b: b) = 14
是如何产生的,我将永远欠你一个人情。