为了账号安全,请及时绑定邮箱和手机立即绑定

递归函数的执行顺序

递归函数的执行顺序

阿里斯托亚 2017-08-24 23:37:10
是不是优先执行递归函数 将别的代码先放一边 等递归完了再将之前因为递归而没有执行的代码再重新执行一遍 是不是这样的 function abc(d){   if(d<=1){     return 1;   }else{     return abc(d-1)*d   } } alert("10!的结果为:" + abc(10)) 这个递归执行顺序是不是每次都只是调用else里的abc()而不*d,等return 1的时候再将之前递归的时候没有*d再挨个乘一遍吗,乘完之后再将其输出?
查看完整描述

1 回答

已采纳
?
氽氽

TA贡献1条经验 获得超0个赞

其实你可以写成一个表达式

Sn = S(n-1)  * (n) 

S(n-1) = S(n-2) *(n-1)

.

.

.

S2 = S(2-1) * (2)

S1 = 1 

把S1 带入到S2的表达式,再把S2 带入到S3的表达式,如此类推

查看完整回答
反对 回复 2017-08-25
  • 阿里斯托亚
    阿里斯托亚
    我就是想知道执行顺序是不是这样的 现在有两个实例不明白运行原理 都是这样的递归
  • 氽氽
    氽氽
    你原来这样理解也是可以的,不过我认为你这里的递归是,可以分为两个过程 调用过程:先从上往下执行生成表达式 d * (d-1) * (d-2) * ....2 * S1 ;S1 =1 是递归出口,结束调用过程 返回过程:从最后返回的数值开始一直返回到最外层调用 S1=1,S1*2,S1*2*3 ...,Sd-1*d ,返回最外层调用 Sd-1*d 结束这个递归
  • 阿里斯托亚
    阿里斯托亚
    function abc(a){     for(var i in a){         if(typeof a[i] === 'object'){             alert(a[i])             abc(a[i]);         }else{             alert(a[i])         }     } }; var dx = {     arr:[1,2,3],     sz:['a','b','c'],     dd:{popo:1},     xx:true }; abc(dx); 那这个递归执行顺序呢 是不是遍历dx对象的arr属性时执行if里的函数调用将该属性的值遍历完 然后再遍历dx对象的下一个属性 然后再通过if里的函数调用将该属性的值再遍历完..... 是不是这个过程
  • 1 回答
  • 0 关注
  • 1706 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信