递归-基础知识总结------彭记(06)

递归

 -在程序中,递归就是函数自己直接或者间接调用自己。

 -就递归而言最重要的就是跳出结构,因为跳出了才可以有结果。

化归思想

-将一个问题由难化易,由繁化简 ,由复杂化简单的过程称为化归,它是转化和归结的简称。

-递归思想就是将一个问题转换为一个已解决的问题来实现

-假如有一个函数'f',如果它是递归函数的话,那么也就是说函数体内的问题还是转换为'f'的形式。

例如:求1~100的和?

function foo(n){

  return n +foo(n-1);

}

上面就是利用了化归思想:

-将求100 转换为求99

-将求99转换为求98

......

-将求2 转换为求1

-求1结果就是1

function foo(n){

  if(n==1){

  return 1;

  }

  return n+foo(n-1);

}

递归实现汉诺塔

<script>
    var index =1;
    /*每一次移动只能移动一个元素,将这个编号的元素从from和位置移动到to的位置*/
    function move(n,from,to){
        console.log('第' + (index++) + '次,将第' + n + '个元素从' + from + '位置移动到' + to + '位置');
    }

    /*将指定数量的元素从from位置,通过temp空位移动到to位置*/
    function hanNouTa(n,from,temp,to){
        if(n == 0){
            return;
        }
        /*先将上面的其它元素全部移到到空位上*/
        hanNouTa(n-1,from,to,temp);
        /*将最后一元素移动到指定的目标位置上*/
        move(n,from,to);
        /*通过空位将刚才的n-1个元素移动到目标位置上*/
        hanNouTa(n-1,temp,from,to);
    }

    hanNouTa(4,'A','B','C');
</script>

 

posted @ 2017-08-12 08:40  依旧安好  阅读(270)  评论(0编辑  收藏  举报