• 递归、迭代和分治法


    一、递归算法:直接或间接地调用自身的算法。

    1、使用递归要注意的有两点:

    • 递归就是在过程或函数里面调用自身;
    • 在使用递归时,必须有一个明确的递归结束条件,称为递归出口.

    2、递归分为两个阶段:

    • 递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;
    • 回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.

    利用递归可以解决很多问题:如背包问题,汉诺塔问题,...等.

    3、优缺点

    • 优点:结构清晰,可读性强,且容易用数学归纳法证明算法的正确性。
    • 缺点:(1) 递归算法需要调用递归栈存放函数的变量、计算结果等直至return后才会释放该栈,所以消耗内存空间;

          (2) 可能存在重复计算相同的子问题。

    二、分治法:将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同,然后递归地解这些子问题,

          最后将各个子问题的解合并得到原问题的接。

    应用:二分搜索、大整数乘法。

    三、迭代:利用变量的原值推算出变量的一个新值。

    四、递归和迭代的区别:

    通过斐波那契数列为例:

          F(0)=1;  n = 0    

    F(n) =   F(1)=1;  n = 1

          F(n)=F(n-1)+F(n-2);  n > 1

    //递归实现
    int fib(int n){
         if(n>1) return fib(n-1) + fib(n-2);
         else return 1; // n = 0, 1时给出recursion终止条件
    }
    //迭代实现
    int fib(int n){
        int i, temp0, temp1, temp2;      
        if(n<=1) return 1;
        temp1 = 0;
        temp2 = 1;
        for(i = 2; i <= n; i++){
            temp0 = temp1 + temp2;
            temp2 = temp1;
            temp1 = temp0;
        }
        return temp0;
    }
    View Code
  • 相关阅读:
    upc组队赛3 T-net【贪心】
    upc组队赛5 Assembly Required【思维】
    upc组队赛5 Bulbs
    upc组队赛5 Ingenious Lottery Tickets【排序】
    upc组队赛5 Hunter’s Apprentice 【判断多边形边界曲线顺逆时针】
    upc组队赛5 Ground Defense【枚举】
    upc组队赛4 Go Latin
    upc组队赛4 TV Show Game 【2-SAT】
    POJ 3250 Bad Hair Day【单调栈入门】
    016.NET5_MVC_视图组件扩展定制
  • 原文地址:https://www.cnblogs.com/jiaoqiang/p/8849707.html
Copyright © 2020-2023  润新知