递归函数
递归函数:在函数内部直接或者间接的调用自己
要求:
1、调用自己(直接或者间接)
2、要有结束条件(出口)
化归思想:将一个问题由难化易,由繁化简,由复杂化简单的过程称为化归,它是转化和归结的简称。
递归思想就是将一个问题转换为一个已解决的问题来实现
递归报错类型:死循环
递归的常规应用:
1、求和:
- 首先假定递归函数已经写好, 假设是
foo. 即foo(100)就是求1到100的和 - 寻找递推关系. 就是
n与n-1, 或n-2之间的关系:foo( n ) == n + foo( n - 1 )
var res = foo(100);
var res = foo(99) + 100;
var res = foo(98) + 99 + 100
........................
var res = foo(2) + 3 + 4 + 5 .....+ 98 + 99 + 100
var res = foo(1) + 2 + 3 + 4 + 5 .....+ 98 + 99 + 100
var res = 1 + 2 + 3 + 4 + 5 .....+ 98 + 99 + 100
将递推结构转换为递归体
function foo(n){
return n + foo( n - 1 );
}
示例1:求n个数的和
<script>
// 使用递归计算n个数的和
function getSum(n) {
// 结束条件
if (n == 1) {
return 1
}
//递归体
return n + getSum(n - 1)
}
//调用函数
let sum = getSum(100)
console.log(sum); //5050
</script>
示图:
示例2:求斐波那契数列第n位数的值
// 求斐波那契数列的第n位数
//1 1 2 3 5 8 13 21 34 55
function febo(n) {
if (n - 1 == 1 || n - 2 == 1) {
return 1
}
//斐波那契数列:值=前第一位+前第两位
return febo(n - 1) + febo(n - 2)
}
let num = febo(5)
console.log(num); //5
示图