递归算法

来源:互联网 发布:视频监控网络服务器 编辑:程序博客网 时间:2024/06/05 11:55

1.什么是递归算法

    任何调用自身的函数称为递归。用递归算法求解问题,要点在于递归函数调用自身去解决一个规模比原始问题小一些的问题。这个过程成为递归步骤。递归算法执行递归步骤,直至到达基本情况。

2.为什么要用递归算法

    递归算法通常比循环迭代方法要更加简洁易懂,当任务能够被相似的子任务定义时,采用递归处理十分有效。

3.递归算法的基本格式

    递归算法有两个要点,当编写递归算法是,其实就是在寻找着两个要点,并将它们编码实现:

    递归步骤:这个要点就是寻找调用函数自身能够完成子任务的逻辑过程;

    基本情况:就是找出递归调用不再执行的基本条件,这一点很重要,否则递归将永远执行下去。

    例如:计算n! n>=0

   

//计算一个数的阶乘int Fact(int n){    //基本情形:当参数为0或1时,返回1    if(1 == n)        return 1;    else if (0 == n)        return 1;    //递归步骤,返回n*(n-1)!    else        return n*Fact(n-1);}
其中,n=1或n=0,就是基本情形,因为n=0或n-1不满足n!=n(n-1)!的递归步骤,n(n-1)!就是递归步骤。记住并并能找出这两个要点,就能很好的记住递归算法的应用。
4.递归算法的缺点

    递归算法的缺点是比较占用内存空间,每当调用一次递归步骤,就需要为新的函数副本分配空间。

5.递归算法的经典用例

    斐波拉契数列、阶乘;

    归并排序、快速排序;

    二分查找;

    树的遍历;

    图的遍历:深度优先,广度优先;

    分治算法;

    汉诺塔

6.例子

    汉诺塔问题:

    有3根柱子和一些可以在柱子之间来回移动的不同大小的圆盘。开始时,所有的圆盘安装从小到大的次序自上而下叠放在一根柱子上,形成一个锥子型,要求把整叠圆盘移动到另一个柱子上,并且:

    每次只能移动一个圆盘。

    每次移动,只能移动柱子最上面的一个圆盘到另一根柱子。

    任何时候不能出现大圆盘在小圆盘上方的情况。

    递归实现

    将源柱最上面的n-1个圆盘移动到辅助柱。

    将第n个圆盘从源柱上移动到目标柱。

    将辅助柱子的n-1个圆盘移动到目的柱。

    源柱最上面n-1个圆盘的移动到辅助柱又可以认为是一个新的问题,并且可以用同样的方式解决。一旦能解决3个圆盘的汉诺塔问题,那么这个算法就可以求解任意数量圆盘的汉诺塔问题。

void TowersOfHanoi(int n, char frompeg, char topeg, char auxpeg) {    //如果仅有一个圆盘,直接移动到目的柱    if (1 == n){        system.out.println("Move disk 1 from peg" + frompeg + "to peg" + topeg);        return;    }    //利用C柱辅助,将A柱最上面的n-1个圆盘移动到B 柱    TowersOfHanoi(n-1, frompeg, auxpeg, topeg);    //将余下的圆盘从A柱移动到C柱    system.out.println("move disk from peg "+frompeg + " to peg " + topeg);    //利用A柱作为辅助,将B柱上的n-1个圆盘移动到C柱    TowersOfHanoi(n-1, auxpeg, topeg, frompeg);}
    给定一个数字,请用递归方法判断数组中的元素是否有序
int isArrayInSortedOrder(int[] A, int index){    if(A.length() == 1) return 1;    return (A[index-1] <= A[index-2])?0:isArrayInSortedOrder(A, index-1);


   

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 神秘人质手机免费观看 今天的我人质 人质列车什么时候上映 出质人和质权人 今天的我又是人质格格党 今天的我又是人质综漫 反恐精英之拯救人质 三年a班大家都是人质 3年a班大家都是人质 三年a班从现在起大家都是人质 3年a班从现在起大家都是人质 人资考试报名条件 人资三级 人资面试问题 富士康人资电话 人资资源管理师 人力资源咨询 hr人力资源软件 人力资源资格证考试 上海人力资源公司 人力资源资格证报名 厦门人力资源 人力资源上岗证 hr人力资源管理系统 人力资源管理就业前景 人力资源证报考条件 东莞人力资源 资源网 武汉人力资源 人力资本 人力资源专业就业方向 长沙人力资源 吴江人力资源网 上海人力资源网 企业人力资源管理 昆山人力资源网 人力咨询公司 大连人力资源 人力资源平台 人力资源是做什么的