刚刚在看到function 的属性arguments实现递归方法,但一直接不明白递归的原理,查了资料,如下
function ar(nums)
{
if(nums <=1)
{
return 1
}
else
{
return nums * arguments.callee(nums-1);
/*
当nums=5时,
return 5*4*3*2*1;
当nums=1;时就返回1并跳出递归
故得出来nums最后的结果为120;
引用别人的图
↓
第1层
n=5 | ||||||||
第2层
返回 120 |
*/
}
}
var rtu=ar;
ar=function(){return 0};
alert(rtu(5));
alert(ar(5));
- /*
- * 普通递归:
- * jc(5)==>
- * 5*jc(4)--->表达式入栈
- * 5*4*jc(3)--->上一步的jc(4)是递归表达式,所以此处要先对其进行出栈,计算完jc(4)=4*jc(3)后在将表达式4*jc(3)入栈
- * 5*4*3*jc(2)--->同上
- * 5*4*3*2*jc(1)--->同上
- * 5*4*3*2*jc(1) ==>由于n=1的时候函数返回的是一个常数1,这个时候表达式变成5*4*3*2*1,不含有任何函数了,
- * 所以开始计算该表达式的结果,计算结果的过程也是一个出栈并计算的过程。
- */
原文地址:http://jqsl2012.iteye.com/blog/1214144