<script type="text/javascript">
function text(n){
if(n===1){
return 1;
}
return n*text(n-1);
}
alert(text(4))
</script>
关于这个递归函数,return
后面n*text(n-1)
,怎么转换为n*3
....?希望高手能帮忙分析下过程,想了很久没想明白..
update
:根据大家的回答,我想了想,尝试着分析了一下过程,是不是如图所示那样进行相乘的?
首先你要知道有一种数据结构叫做 栈(stack):重点是先进后出(FILO)
接着你要知道函数执行是通过一个函数栈:简单来说就是执行一个函数时,将其压栈,这个函数又调用一个函数,就把新函数再次压栈。
本题的执行情况就是,首先执行 text(4),被放入栈底,在 return 的时候又调用了 text(3),也被压栈(放在 text(4) 上面)。而 text(3) 在执行的时候又会压入 text(2)...
直到最后的退出条件 n === 1 成立,即 text(1) return 1,这时开始出栈。
text(1) 首先出栈,接着是 text(2) 获得了 text(1) 的结果 1 之后,return 2*1; 接着出栈。
如上所述,依次执行出栈,最后栈底的 text(4) return 了 4*text(3)的 return 值返回,执行完成。