递归

1.概念:

  当函数直接或间接调用自己的时候,则发生了递归

2.场景:

  (1)数据的定义是按递归定义的。(Fibonacci函数)

  (2)问题解法按递归算法实现。(回溯)

  (3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)

3.缺点:

  运行效率较低,递归次数过多容易造成栈溢出等

4.例子:

  (1)斐波那契 1、1、2、3、5、8、13、21...    

const a = function (n){
    if (n == 0) {
        return n;
    }else if (n == 1) {
        return n;
    }else{
        return a(n-1)+a(n-2);
    }
}
//console.log(a(8))

  (2)找出传入值的一个key值

function a(data,item){
    var arr = [];
    if (argular.isArray(data)) {
        data.forEach(function(n){
            if (n === item) {
                return data[item];
            }else if (argular.isArray(n) || angular.isObject(n)) {
                return a(n,item)
            }
        })
    }else{
        for (var key in data) {
            if (key === item) {
                arr.push(data[item]);
                console.log(arr)
                return data[item];
            }else if (argular.isArray(key) || angular.isObject(key)) {
                return a(data[key],item);
            }
        }
    }
}

var data = {a:'1010',b:[{name:'b',age:'12',money:'20'},{name:'cc',age:'14',money:'30'}]}

a(data,'money')

  (3)求数组中的最大数

function maxNum(arr,len) {
    if (len == 1) {
        return arr[0]
    }else{
            let Max1 = maxNum(arr,len-1);
            return (Max1 > arr[len-1]) ? Max1 : arr[len-1];
    }
}
var a = [10,20,6,9,4,8];
console.log(maxNum(a,6))
原文地址:https://www.cnblogs.com/peiyao/p/7382851.html