/10.1*2*3*4*5的递归乘级
//看我写的一定懂!!!!
//看下面代码
function rcs(n){
if(n==1){
return 1
}
return rcs(n-1)*n
}
document.write(rcs(5))//传进去的5
//执行步骤重点,
//第一轮
传值5进函数,
形参变成5 n=5
判断n==1,现在n=5,所以错误不进入
return是返回后面代码得出的值,在值没有得出结果不会执行
rcs(n-1)*n 此处重点,分解rcs(5-1)*5这个是个自调用
分解rcs(5-1)*5 结果是rcs(4)*5
//第二轮rcs(4)进去
传值4进函数,
形参变成4 n=4
判断n==1,现在n=4,所以错误不进入
return是返回后面代码得出的值,在值没有得出结果不会执行
rcs(n-1)*n 此处重点,分解rcs(4-1)*4这个是个自调用
分解rcs(4-1)*4 结果是rcs(3)*4
//第三轮rcs(3)进去
传值3进函数,
形参变成3 n=3
判断n==1,现在n=3,所以错误不进入
return是返回后面代码得出的值,在值没有得出结果不会执行
rcs(n-1)*n 此处重点,分解rcs(3-1)*3这个是个自调用
分解rcs(3-1)*3 结果是rcs(2)*3
//第四轮rcs(2)进去
传值2进函数,
形参变成2 n=2
判断n==1,现在n=2,所以错误不进入
return是返回后面代码得出的值,在值没有得出结果不会执行
rcs(n-1)*n 此处重点,分解rcs(2-1)*2这个是个自调用
分解rcs(2-1)*2 结果是rcs(1)*2
//第五轮
传值1进函数,
形参变成1 n=1
判断n==1,现在n=1,所以进入
开始执行 return ,return 1 到调用处
第五轮返回1到第四轮 return rcs(2-1)*2 到这里,解析就是rcs(2-1)的返回值是1,所以1*2=2,
得出结果就可以开始return!!了,返回到第三轮 return rcs(2-1)*2
//第六轮
第四轮返回2到第三轮 return rcs(3-1)*3 到这里,解析就是rcs(3-1)的返回值是2,所以2*3=6,
得出结果就可以开始return!!了,返回到第二轮 return rcs(3-1)*3
//第七轮
第三轮返回6到第二轮 return rcs(4-1)*4 到这里,解析就是rcs(3-1)的返回值是6,所以6*4=24,
得出结果就可以开始return!!了,返回到第一轮 return rcs(4-1)*4
//第八轮
第二轮返回24到第一轮 return rcs(5-1)*5 到这里,解析就是rcs(5-1)的返回值是24,所以24*5=120,
最终返回给第一次调用者 return rcs(5-1)*5 这个值是120,
写得多,挨着慢慢看,边看边画就能懂!!!
写得多,挨着慢慢看,边看边画就能懂!!!
写得多,挨着慢慢看,边看边画就能懂!!!
写得多,挨着慢慢看,边看边画就能懂!!!
纯手写,把运行都一步一步写上了,不懂的人,只需要把每一轮画出来就会很明白
0-0。。。