• 浅谈对递归算法的理解……


    递归:

            所谓递归,就是既有传递,又有回归,与其说是传递与回归,初学不如理解是一种  “循序递进”与“规律约束”。

            为什么这样说,因为递归算法相比较于循环在代码结构方面个人认为更加简洁清晰,清晰易懂,递归注重的是一种有序的规律,所以在每个程序开始之前,我们只要能找到一个使程序循序递进的规律;并且在整个过程都在用此规律进行传递,但是递归算法也有很大的缺点,会造成内存空间不足,从而形成内存溢出;所以针对这种缺点,就会引入“规律约束”,在每一次算法的的开始之前,先对算法进行一个规律约束,而这种约束可以理解为一个“归期”;即到这个归期不得已而为之……

    eg:1 计算1+2+3+4+……+100的值。

    function fn(n){
    if(n==1)return 1;       //归期
    return n+fn(n-1);       //规律
    }
    console.log(fn(100));

    eg:2 计算n 和 1/n!的阶乘。

    1. n!
    function
    fn(n){ if(n==1)return 1; //归期 return n*fn(n-1); //规律 } console.log(fn(5));

    2. 1/n!
    function fn(n){
    if(n==1)return 1;         //归期
    return 1/n*fn(n-1);         //规律
    }
    console.log(fn(5));

     eg:3 斐波拉契数列(求第n个数的数值)  

    1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987……
    function fn(n){
    if(n==1||n=2)return 1;        //归期
    return fn(n-1)+fn(n-2);         //规律
    }
    console.log(fn(8));
    eg:4 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数求/1+1/3+...+1/n
    function fn(n){
    if(n%2==0){
    if(n<=2)return 1/2;       //归期
    return 1/n+fn(n-2);       //规律
    }
    if(n%2!=0){
    if(n==1)return 1;         //归期
    return 1/n+fn(n-2);
    }
    }
    console.log(fn(4));

    eg:5 求1!+1/2!+1/3!+...+1/n!(递归与循环的结合)

       // function fn(n) {
        //     if (n == 1) return 1;       //归期
        //     return 1 / n * fn(n - 1);   //规律
        // }
                                            // console.log(fn(5));



    // function fn1(n) { // var sum = 0; // for (i = 1; i <= n; i++) { // sum += fn(i); // } // return sum; // } // console.log(fn1(5))
     

     

     

  • 相关阅读:
    模拟_大数字符串(HDU_2054)
    DP_字串匹配(HDU_1501)
    动态字典树_字串标记查找+大数(HDU_4099)
    动态字典树_字串查找匹配(HDU_1075)
    动态字典树+DFS(HDU_1298)
    动态字典树_拆分查找(HDU_1247)
    动态字典树_统计前缀子串(HDU_1251)
    动态字典树_统计子串(HDU_2846)
    字典树讲解
    HTML5语义标签的实践(blog页面)
  • 原文地址:https://www.cnblogs.com/gzw-23/p/11437452.html
Copyright © 2020-2023  润新知