递归:这两个字面的意思就非常形象化,递
就是传递,你把一个东西一层一层的传递下去;归
就是从最后一层,比如说你去故宫走过了一个门又一个门,然后等你走到头之后,你就要返回,所以说 归
就是 回
,回到之前的位置。
所以递归要遵循两个原则:
- 函数自身调用自身,执行
递
的动作 - 最后一次判断一个终止条件,执行
归
的动作
//先进入函数n,然后进入函数n-1...知道最后进入函数1
function(n)-->function(n-1)....function(1)
//然后又从函数1,一直返回到函数n
function(1)...function(n-1)-->function(n)
举一个栗子:(用JS求阶乘)
function factorial(n){
if(n == 1)
{
console.trace();//跟踪递归调用的过程
return 1;//终止条件-->“归”
}
return n * factorial(n-1);//自身调用自身-->“递”
}
alert(factorial(5));//120
我们感觉使用递归算法有点没头没脑,其实我们就是假设它已经成功了,然后我们找到 递
和 归
,然后就让它自己去求解。
这种算法虽然效率比较低下,但是掌握之后我们用这种方法来编程我们会少思考很多东西,只要我们每一步的思路是正确的,那它跟着结果走就肯定会得到答案。