递归

作者: 倾国倾城的小饼干 | 来源:发表于2018-04-03 09:32 被阅读0次

递归

概念
递归就是函数调用自身,直到达到某种状态。
调用自身的函数就是我们在同一个函数内调用自己。
达到某种状态就是递归有一个临界值使其停下来。
递归与循环
递归和循环可以互相转化。条件是当递归中的参数是固定的时候。
递归的步骤

  1. 假设递归函数已经写好
  2. 寻找递归关系
  3. 把递归关系转化为递归函数
  4. 加入临界值

例如求2,4,6,8...的第n项与前n项的和.
分析:

  1. 假设f(n),与sum(n)
  2. 递归关系
    f(n)=f(n-1)+2
    sum(n)=f(n)+sum(n-1)
  3. 加入临界值
    if n=0,ruturn 2
  4. 把递归关系转化成递归函数
function fn(n){
    if(n==0) return 2;
    return f(n-1)+2;
}
function sum(n){
    if(n==0) return 2;
    return f(n)+sum(n-1);//返回的是递归关系
}

递归的类型

普通函数中的递归
回文

function fn1(m){
    if(m<=1) return true;
    if(m.charAt(0)!=m.charAt(m.length-1)return false;
    return fn1(m.substr(1,m.length-2);
}//先找其中的一种情况,然后再返回递归关系反复调用。

实现3个‘chirp-chirp-chirp’

function chirp(m){
    if(m==0) return 'chirp';
    if(m>=1) return chirp(m-1)+'-chirp';
}
var a=chirp(2);
console.log(a)//此题注意if条件判断中的等号不是‘=’,而且对于这种字符串的题一般与其下标有关。

++方法中的递归++
可以将上例改为方法:

var obj={
    chirp: function(m){
        if(m==0) return 'chirp';
        if(m>1) return chirp(m-1)+'-chirp';
    }
}

方法递归中引用丢失的问题

var obj={
    chirp: function(n){
       return n>1?obj.chirp(n-1)+'-chirp':'chirp'
    }
}
var ninj={chirp:obj.chirp}
 obj={}//这样操作的话,obj为空,属性被清空后,ninj也会受影响。所以应该把方法中的换成this.这样当ninj用的时候指的就是ninj。

除了可以用this外,还可以给函数起一个名字。

var obj={
    chirp: function sinj(n){
       return n>1?sinj.chirp(n-1)+'-chirp':'chirp'
    }
}
var ninj={chirp:obj.chirp}
obj={}//这样的操作就不会导致递归引用丢失  

相关文章

  • 二叉树遍历

    先序遍历——[递归、非递归] 中序遍历——[递归、非递归] 后序遍历——[递归、非递归] 层次遍历——[递归、非递归]

  • 二叉树的遍历

    先序递归: 非递归: 中序递归: 非递归: 后序递归: 非递归 层次遍历

  • 二叉树的前序、中序、后序遍历(递归、非递归)

    二叉树 前序 递归: 非递归: 中序 递归: 非递归: 层序 递归: 非递归:

  • 树的遍历,golang实现

    先序,递归 中序,递归 后序,递归 先序,非递归 中序,非递归 后序,非递归 层序遍历

  • 3 递归(19)(方法层面的高级循环)

    递归 树的递归 其它递归

  • 递归,递归,递归

    在我告诉你什么是递归之前,你应该读一下这篇文章:递归,递归,递归。 如果你没有这么做,那么表扬一下自己。如果你那么...

  • 数据结构-树的遍历

    1. 先序遍历 递归实现 非递归实现 2. 中序遍历 递归实现 非递归实现 3. 后序遍历 递归实现 非递归实现 ...

  • 树的遍历

    节点结构: 先序遍历 递归 非递归 后序遍历 递归 非递归 中序遍历 递归 非递归 层序遍历 类库 有了上述遍历算...

  • 算法图解系列之递归[03]

    3 递归 3.1 递归<函数> 3.2 基线条件和递归条件 3.3 递归调用栈

  • 三十八、递归

    一、递归的概述 递归,指在当前方法内调用自己的这种现象。 递归分为两种,直接递归和间接递归。 直接递归称为方法自身...

网友评论

      本文标题:递归

      本文链接:https://www.haomeiwen.com/subject/rxcqhftx.html