递归解析

142 阅读1分钟

概述:

所谓递归,其实就是自己调用自己,其中最重要的思想,是怎么划归。

  • 函数本身要做一件事,调用一个函数其实就是在做一件事
  • 自己调用自己,要做一件事情,就要先做 什么什么
    • 如果要做某个事情就是将其转换为已经解决的问题
    • f1 调用 f2:如果要做 f1,即先做 f2
    • f2 调用 f3:如果要做 f2,即先做 f3 以此类推
    • 尽头在哪里呢,也即,临界条件,递归的跳出条件

方法:

  1. 首先假设已经完成递归函数
    //代码可以改写为
    function fn(){
        //...
        fn()
        //...
    }
  1. 找出这个转换的条件(难点)
  2. 找出临界条件
    //代码可以改写为
    function fn(){
        if(临界条件) return
        //...
        fn()
        //...
    }
    //代码可以改写为
    function fn(){
        for(){
            //...
            fn()
            //...
        }
        //...
    }

案例:

  • 等差数列与等比数列
    • 求 第n项: 1 2 3 7 9 --> 2n+1
    function normal(n){
        return 2n-1
    }
    function fn(n){
        return fn(n-1) + 2
    }
    //1.先假设已经实现了
    //2.找到转换的规律(递推,找连续项的关系)
    //3.找临界条件
    function fn(n){
        if(n == 0) return 1
        return fn(n-1) + 2
    }
    
  • 差分数列
    • 求 第n项: 1 2 4 7 11 16 ...
    function fn(n){
          if(n = 1) {return 2}
          else if(n = 0) {return 1}
          return 2*fn(n-1) - fn(n-2) + 1
    }