递归、迭代和分治法

转自

递归、迭代和分治法

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

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

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值