递归函数

215 阅读1分钟

递归函数

递归函数:在函数内部直接或者间接的调用自己

要求:

1、调用自己(直接或者间接)

2、要有结束条件(出口)

化归思想:将一个问题由难化易,由繁化简,由复杂化简单的过程称为化归,它是转化和归结的简称。

递归思想就是将一个问题转换为一个已解决的问题来实现

递归报错类型:死循环

递归的常规应用:

1、求和:

  1. 首先假定递归函数已经写好, 假设是foo. 即foo(100)就是求1100的和
  2. 寻找递推关系. 就是nn-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

示图