一、递归
主要用代码解释
1.定义:递归函数就是在函数体内调用本函数。
2.注意:递归函数的使用要注意函数终止条件避免死循环。
比如以下的代码:
function f1(){
console.log(a);
f1()
}
f1() // 这么写的话会一直输出a,不会停
count=0
function f1(){
count++
console.log(count);
f1()
}
f1() // 这么写的话,会从1开始每次加一,一直加到不能加位置,不然的话不会停
那么这时候加一个条件的话,会按照条件里的来运行输出
var count=0
function f1() {
// 有一个判断条件到100时就会停止
if(count==100){
return
}
count++
console.log(count);
f1()
}
f1() // 从1输出到100 停止
以上案例就是递归基本函数,要有一个停止条件
案例详细解释运算过程
案例1:
var sum = 0
var a = 0
function f1() {
if (a == 4) {
return 4
}
a++
return a + f1()
}
var result = f1()
console.log(result); // 14
// a=0,a不等于4,为false,a++之后a=1,1+f1()执行函数f1()
// a=1,a不等于4,为false,a++之后a=2,2+f1()执行函数f1()
// a=2,a不等于4,为false,a++之后a=3,3+f1()执行函数f1()
// a=3,a不等于4,为false,a++之后a=4,4+f1()执行函数f1()
// a=4,if判断为true,return 4,输出4,这里的return a + f1()就是return 4+4=8,将执行结果返回上一级,a=3的时候
// 上一级中return a+f1()=return 3+f1()中的f1()就是8,这里a=3,所以返回11,再返回给上一级,a=2的时候
// 上一级中return a+f1()=return 2+f1()中的f1()就是11,这里a=2,所以返回13,再返回给上一级,a=1的时候
// 上一级中return a+f1()=return 1+f1()中的f1()就是13,这里a=1,所以返回14,这里就要输出最后的结果,递归已经完成
案例2:计算1-5的阶乘:1 * 2 * 3 * 4 * 5
function fn(n) {
// 递归结束条件
if (n == 1) {
return 1
}
return n * fn(n - 1)
}
var result = fn(5)
console.log(result); // 120
// n=5,不等于1,为false,返回return 5*fn(4),再次执行函数fn()
// n=4,不等于1,为false,返回return 4*fn(3),再次执行函数fn()
// n=3,n=4同理
// n=1,不等于1,为false,返回return 1,就等于fn(1)
// 得知fn(1)=1,所以n=2的时候,return 2*fn(1)=fn(2)=2
// 得知fn(2)=2,所以n=3的时候,return 3*fn(2)=fn(3)=6
// fn(3),fn(4),fn(5)同理,最后输出结果为120
案例3:计算1+2+3+4+5+…+n的和
function fn(n) {
if (n == 1) {
return 1;
}
return n + fn(n - 1);
}
console.log(fn(10)); // 55
// 计算意思和1-5的阶乘一样