zoukankan      html  css  js  c++  java
  • javascript 算法 ---递归

    “要理解递归,首先要理解递归。” ——佚名

    递归函数是在函数内部能够直接或间接调用自身的方法或函数

    假设一个函数一直调用自己结果是什么?单就上述情况而言,它会一直执 行下去。因此,每个递归函数都必须有基线条件,即一个不再递归调用的条件(停止点),以防 止无限递归。 

    function A(X) {   
      const recursionAnswer = confirm('Do you understand recursion?');
    if (recursionAnswer === true) {
        //基线条件 ,停止点
       return true;
     }
      //递归调用
      A(recursionAnswer);
    }

    作为递归的第一个例子,我们来看看如何计算一个数的阶乘。数 n的阶乘,定义为 n!,表示 从 1到 n的整数的乘积。
    5的阶乘表示为 5!,和 5 × 4 × 3 × 2 × 1相等,结果是 120。(注意一个概念定义 0!= 1,不是等于 0)

     function factorial(x){
        //基线
        if(x == 0 || x==1){
           return 1;  
        }
        //递归调用
        
        return    x*factorial(x-1);
    
    }

    斐波那契数列

     0、1、1、2、3、5、8、13、21、 34等数组成的序列。数 2由 1 + 1得到,数 3由 1 + 2得到,数 5由 2 + 3得到,以此类推。斐波 那契数列的定义如下。 

    //迭代的方法

    function fibonacciIterative(n) {  
           if (n < 1) return 0;
           if (n <= 2) return 1; 
           let fibNMinus2 = 0;  
           let fibNMinus1 = 1;  
           let fibN = n;  
           for (let i = 2; i <= n; i++) { 
                 // n >= 2 
                fibN = fibNMinus1 + fibNMinus2; 
                // f(n-1) + f(n-2)   
                fibNMinus2 = fibNMinus1;  
                fibNMinus1 = fibN;  
           }   
      return fibN; 
    } 
                           

    //递归的方法

    function fibona(n){
        if(n <= 2)
        {
            return 1;
        }
        if(n < 1)
        {
            return 0;
        }
        reurn fibona(n-1)+fibona(n-2);
    }
  • 相关阅读:
    splice方法以及如何实现数组去重
    数组的几个重要方法以及如何清空数组
    for-in遍历
    浅谈json和数组的区别
    js实现查找替换关键字的效果
    js实现查找关键字效果
    原生js中大小写转化以及split分割字符串方法
    eclipse没有Web项目和Server选项
    【学习】005 线程池原理分析&锁的深度化
    什么是CPU密集型、IO密集型?
  • 原文地址:https://www.cnblogs.com/elexmiumiu/p/12206512.html
Copyright © 2011-2022 走看看