js关于递归里的return

定义一个函数,该函数用于计算一个正数的因子和(比如6的因子和是1+2+3+6=12。因子就是能整除一个整数的整数。因子又叫“约数”。)
var n=1;
var sum=0;
function total(i)
{if (i%n==0)
{sum=sum+n;
}
n++;

if (n>i)
{

return sum;
}
我说的是这一行 return total(i);

}

var u=total(9);
document.write(u);
我想问的是,为什么我标记的那一行里,如果省去return,我上面的return sum出来的结果就会是undefined

首先看题主的代码,按照要求,去掉函数中最后一个 return

首先 调用 total(9),这时 total中 i 的值为 9, 然后执行 if 条件  i % n == 0  (9 % 1 == 0),结果为true,进入执行 sum = sum+n,然后执行 n++ (n = 2);然后执行 if 条件 n > i ( 2 > 9),结果为 false,跳过 if, 执行下一步  total(i)

问题就出现在这里,执行第一层的时候 total 函数并没有返回值,当total 进入最后一层循环的时候,即便是返回了 sum, 因为前面的几层并没有返回,所以最后结果就会是 undefined

所以,想要最终有结果返回,即便是递归,也得保证层层有 return

追问

那这在段函数中,我的return total(i)有什么意义呢?为甚么这样能够把sum值传给下一层呢?

追答

return  total(i) 的意义在于,将下一层函数执行的返回值 返回给上一层

写成伪代码的话,类似于这样:

如果不加return,写成伪代码类似这样:

追问

谢谢你,我以后有问题可以私信问你吗?

追答

可以的,没问题

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网