【发布时间】:2012-10-04 19:20:43
【问题描述】:
请以最简单的方式解释递归的工作原理。
【问题讨论】:
-
要了解递归,首先要了解递归。
</obligatory> -
先了解递归是什么意思
-
是的,@SLaks,你的基本情况在哪里??
请以最简单的方式解释递归的工作原理。
【问题讨论】:
</obligatory>
递归是一种从自身内部调用自身的方法。
例子:
public void recur(int x)
recur(10);
end
【讨论】:
这是递归方法的一个简单示例:-
public int recur(int count) {
if (count < 10) {
return count + recur(count++);
}
return count;
}
System.out.println(recur(0)); // Invoke first time
【讨论】:
递归是函数调用自身的时候:
int factorial(int integer)
{
if (integer == 1)
return 1;
else
return (integer*(factorial(integer-1)));
}
【讨论】:
如前所述,递归是函数调用自身的时候。这里使用factorial 进行说明,其中factorial(5) 在数学上计算为值5 * 4 * 3 * 2 * 1。
public int factorial(int x) {
if (x == 1) return 1;
else return x * factorial (x - 1);
}
// Try routine
factorial(3);
计算结果为
factorial(1) = 1 = 1
factorial(2) = 2 * factoral(1) = 2 * 1
factorial(3) = 3 * (2 * factorial(2) * (factorial(1)) = 3 * 2 * 1
...
【讨论】:
if (x == 1) return 1; 应该是 if (x == 0) return 1;
通常,它是一个函数,自己计算一个结果,然后调用自己来获取其余结果。
例如,要得到小于或等于 3 的所有正数,函数会说:“一个结果是 3,其余结果都是小于或等于 2 的正数。让我们用 2 调用自己并添加这个结果是我计算出来的。”
当然,递归函数需要小心有一个“结束条件”,否则它们永远不会返回结果。在本例中,结束条件是当函数以 0 调用时,它应该只返回 0。
【讨论】: