递归函数

假如一个函数或子程序,是由自身所定义或调用的,就称为递归。递归至少要定义两种条件:一个是能够反复执行的递归过程,和一个跳出执行过程的出口。算法

 汉诺塔问题函数

  说是在古印度神庙,庙中有3根木桩,天神但愿和尚们把某些数量大小不一样的盘子,从第一个木桩所有移到第三个木桩。即假设有a,b、c三个木桩和n个大小不相同的盘子,从小到大编码为一、二、3...n,编号越大,直径越大,开始的时候,n个盘子都放在木桩a上,如今但愿能找到将木桩a上的盘子借着木桩b当桥梁,所有移到木桩c上的最少次数的方法(直径小的盘子永远只能放在直径大的盘子的上面;盘子能够任意移动到其余木桩上;每次只能移动一个盘子)。分析汉诺塔问题能够发现,它知足了递归的两大特色:1,有反复执行的过程;2,有中止的出口。编码

  汉诺塔的算法就3个步骤:第一,把a上的n-1个盘经过c移动到b。第二,把a上的最下面的盘移到c。第三,由于n-1个盘全在b上了,因此把b当作a重复以上步骤就行了。用代码实现为spa

function hanoi(n,p1,p2,p3){ if(n==1){//递归出口
        console.log("盘子从"+p1+"移动到"+p3); }else{ hanoi(n-1,p1,p3,p2) console.log('~盘子从'+p1+'移动到'+p3) hanoi(n-1,p2,p1,p3) } } let hanoi = (n,p1,p2,p3) => {   if(n==1){     console.log("盘子从"+p1+"移动到"+p3);   }else{     hanoi(n-1,p1,p3,p2)     console.log('~盘子从'+p1+'移动到'+p3)     hanoi(n-1,p2,p1,p3)   } }

 

斐波拉契数列code

斐波拉契数列的基本定义是,一个数列的第零项是0,第一项是1,这个数列其余后续的值是前面两项的数列之和。一样符合递归的两个特征。blog

function factorial(i){   if(i==0){//跳出执行过程的出口
    return 0;   }else if(i==1){     return 1;   }else{     return factorial(i-1)+factorial(i-2);   } } let factorial = (i) => {   if(i==0){//跳出执行过程的出口
    return 0;   }else if(i==1){     return 1;   }else{     return factorial(i-1)+factorial(i-2);   } }
相关文章
相关标签/搜索