js关于递归里的return

定义一个函数,该函数用于计算一个正数的因子和(比如6的因子和是1+2+3+6=12。因子就是能整除一个整数的整数。因子又叫“约数”。)varn=1;varsum=0;fu... 定义一个函数,该函数用于计算一个正数的因子和(比如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
展开
 我来答
longjingx
2018-03-23 · 超过11用户采纳过TA的回答
知道答主
回答量:17
采纳率:91%
帮助的人:14.8万
展开全部

首先看题主的代码,按照要求,去掉函数中最后一个 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,写成伪代码类似这样:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式