浅谈数据结构算法中的递归算法与分治

算法策略

1.算法设计与分析
2.分治法,动态规划,贪心,回溯法,分支限界法,概率算法

什么是递归算法

1.直接调或间接调用自身的算法称为递归算法
2.用函数自身给出定义的函数称为递归函数

举例1:阶乘函数:

阶乘函数可递归地定义:
在这里插入图片描述

边界条件与递归方程是递归函数的两个要素,递归函数只有同时具备这两个要素,才能在有限次计算后得出。

举例2:fibonacci数列

fibonacci函数可递归地定义为:

在这里插入图片描述
部分代码实现:
public int fibonacci(int n){
if(n==1 || n == 0 ){
return 1;
}
return fibonacci(n-1)+fibonacci(n-2);
}

fibonacci算法的循环实现

部分代码实现如下:
public int forFib(int n){
int [] arr = new int [n+1];
arr[0] = arr[1] =1;
for(int i =2;i<=n;i++){
arr[i] = arr[i-1]+arr[i-2];
}
return arr[n];
}

循环和递归地关系

1.凡是递归能实现的程序都可以用循环实现

2.凡是循环能实现的程序不一定能用递归实现

阶乘的循环实现方法

public int forf(int n){
int s = 1;
for(int i=1;i<=n;i++){
s=s*i;
}
return s;
}

fibonacci
1.循环不需要保存中间结果,一个循环可以完成O(n)
2.递归,逆推的过程O(2的n次方)

扫描二维码关注公众号,回复: 9485634 查看本文章
循环和递归地对比

1.算法的效率 : 循环的效率>>递归
2.占用空间 : 循环<<递归
3.代码量 :循环>>递归
4.解决问题的思路:循环(复杂)>>递归(简单)

递归算法小结:

优点:
结构清晰,可读性强,而且容易用数学归纳法 来证明算法的正确性,因此它为设计算法。调试程序带来了很大的方便。
缺点:
递归算法的运行效率比较低,无论是耗费的计时时间还是占用的存储空间都比非递归算法要多。

分治的思想:

1.首先把问题分解成K个子问题,对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归地进行下去,直到问题规模足够小,很容易求出其解为止。
2.将求出来的小规模的问题的解合并成为一个更大规模的问题的解,自底向上逐步求出原来问题的解。

发布了12 篇原创文章 · 获赞 0 · 访问量 176

猜你喜欢

转载自blog.csdn.net/weixin_45722104/article/details/104024412