zoukankan      html  css  js  c++  java
  • 编程思想之递归

    我之前写过关于递归算法的博文,但作为编程思想系列的文章不得不再对它进行进一步深入的剖析。因为它是一种简单、常用又重要的一种编程思想。

    什么叫递归?

    举一个通俗的例子:

    有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩。你肯定会想到这样做:

    1.第一刀先把一个苹果切成重量均等的2份A1和A2;

    2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均等的两份A21和A22;

    3.把A11切成均等的两份……

    4.直到每一小份都小于等于1俩为止。

    以上的例子就是递归一个模型,把一个大的事物化成若干个小的事物,每一次使用的方法都相同。

     

    更为专业的定义:

    程序自身调用自身的编程技巧称为递归( recursion)。递归有直接递归和间接递归

    •直接递归:函数在执行过程中调用本身。

    •间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。

    递归有四个特性:

    1.必须有可最终达到的终止条件,否则程序将陷入无穷循环;

    2.子问题在规模上比原问题小,或更接近终止条件;

    3.子问题可通过再次递归调用求解或因满足终止条件而直接求解;

    4.子问题的解应能组合为整个问题的解。

     

    上面的例子中也满足以上的四点性质:

    (1).终止条件是每一份的重量不能大于1俩;(2).每一次切的大小都比上一次小;(3).每一次切的方式都相同,所以子问题可递归调用;(4).最终切成的每一小份也就是要求的解。

     

    对上面例子的实现:

    public static void sliceApple(float weight, int times){  
            if (weight <= 1) {  
                //System.out.println("weight:" + weight);  
            } else {  
                float w = weight / 2;  
                System.out.println("第" + times + "次等分的重量为:" + w + "   " + w);  
                times += 1;  
                sliceApple(w, times);  
                sliceApple(w, times);  
            }  
        }  
      
        public static void main(String args[]) {  
            sliceApple(8, 1);  
        }
    

    结果:

    第1次等分的重量为:4.0   4.0

    第2次等分的重量为:2.0   2.0

    第3次等分的重量为:1.0   1.0

    第3次等分的重量为:1.0   1.0

    第2次等分的重量为:2.0   2.0

    第3次等分的重量为:1.0   1.0

    第3次等分的重量为:1.0   1.0

    递归能做什么?

    将大问题分解成小问题,将复杂的问题简单化;

    使程序更易于理解,增强可读性;

    你会怎样使用递归?

    分析问题,看看问题是否属于递归模型,能否用递归模型解决。一个问题能否用递归模型就看它是否满足递归的四个特性。

    递归在调用的时候要保存调用点的信息,因此会有调用开销。在对效率有较高要求的时候,如果能用循环解决问题最好不要用递归,因为循环没有调用开销,效率会更高。

  • 相关阅读:
    Watchguard公司内部招聘:C Developer in Linux Requirements
    条件注释判断浏览器<![if !IE]><![if IE]><![if lt IE 6]><![if gte IE 6]>
    js之事件冒泡和事件捕获详细介绍
    javascript:;与javascript:void(0)使用介绍
    IE和FireFox中JS兼容之event .
    Adobe下周将推新补丁和新的更新模式 狼人:
    微软下周二发布11个补丁 修复25个安全漏洞 狼人:
    安全专家担心Adobe没有足够实力来阻止黑客攻击 狼人:
    保证安全 认清五种易被忽视的攻击方式 狼人:
    六成黑客攻击与PDF漏洞有关 远超微软 狼人:
  • 原文地址:https://www.cnblogs.com/phpxuetang/p/5158541.html
Copyright © 2011-2022 走看看