老师,能详细讲一下这个递归原理吗

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 通过递归算法,求1+2+3+4+5+6......100的和。
function sum(n) {
if (n == 1) return 1;
return n + sum(n - 1);
};
console.log(sum(100));
</script>
</body>
</html>
源自:函数
4-3 递归常见算法题
13
收起
正在回答 回答被采纳积分+1
1回答
imooc_慕慕
2022-09-05 09:45:02
同学你好,解答如下:
递归是将复杂的问题,变成为简单的同一问题,将一个函数不断的调用自己,但是不能无限调用自己,不然就会陷入无穷的死循环,因此需要有一个递归终止条件。
针对于上述题目可知,这个结束条件就是1。
假设1-100的和这个函数为fn();
fn(100) = 100+fn(99);
fn(99) = 99 + fn(98);
fn(98) = 98+fn(97);
...
fn(2) = 2 + fn(1);
fn(1) = 1;
function sum(n) {
// 递归的结束条件,设置递归的出口,如果n等于1,此时递归结束并返回1
if (n == 1) return 1;
//如果不是1,就返回 n+sum(n-1)继续调用自己
return n + sum(n - 1);
}
var result = sum(100);
document.write('1+2+3+4+5+6……100的和是' + result);假设我们求取1-5之和,那么过程如下:
fn(5) = 5+fn(4);
fn(4) = 4+fn(3);
fn(3) = 3+fn(2);
fn(2) = 2+fn(1);
fn(1) = 1;
得到fn(1)的值之后,接着我们去返回去推fn(5)的值;
fn(1) = 1;
fn(2) = 2+fn(1); ==>2+1 = 3
fn(3) =3+ fn(2); ==>3+3 =6
fn(4) = 4+fn(3); ==>4+6 =10
fn(5) = 5+fn(4); ==>5+10=15

上面的推算步骤只是拆分成了每一小步,当电脑计算的时候,每一步都会即刻返回结果。
因此100的数之和和这个举例道理是一样的,
同学可以再重新理解一下。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星