一、前置疑问

Q1、什么是递归
Q2、如何分析递归算法

二、学习内容

1、递归的定义

递归是一种直接调用自己或者间接调用自身的方法。递归由两个部分组成。

  1. 基础情况:即最简单情况时可以直接输出,是递归出口。
  2. 递归部分:递归部分的类型和整个类型是相同的。

2、几个常见的递归程序

  1. 斐波那契数列
  1 #include <stdio.h>2 #include <stdlib.h>3 4 int Fibonacci(int num)5 {6     if(num <= 1)7         return num;8     else9         return Fibonacci(num-2)+Fibonacci(num-1);10 }11 12 int main(void)13 {14     int num;15     scanf("%d",&num);16     num = Fibonacci(num);17     printf("%d\n",num);18     exit(0);19 }
  1. 欧几里德递归算法,求出最大公约数
   1 #include <stdlib.h>2 #include <stdio.h>3 4 void Swap(int *a, int *b)5 {6     int c = *a;7     *a = *b;8     *b = c;9 }10 11 int RGcd(int m, int n)12 {13     if(m == 0)14         return n;15     return RGcd(n%m, m);16 }17 18 int Gcd(int m, int n)19 {20     if(m < n)21         Swap(&m, &n);22     return RGcd(m, n);23 24 }25 26 int main(void)27 {28     int a, b, c;29     scanf("%d%d",&a, &b);30     c = Gcd(a, b);31     printf("%d\n", c);32 33     exit(0);34 }
  1. 汉诺塔
  1 #include <stdlib.h>2 #include <stdio.h>3 4 void Move(int n, char x, char y)5 {6     printf("The disk %d is moved from %c ---> %c\n",n,x,y);7 8 }9 10 void Hanoi(int n, char x, char y, char z)11 {12     if(n)13     {14         Hanoi(n-1, x, z, y);15         Move(n, x, y);16         Hanoi(n-1, z, y, x);17 18     }19 }20 21 22 int main(void)23 {24 25     int num;26     scanf("%d",&num);27     Hanoi(num, 'x', 'y', 'z');28 29 30     exit(0);31 }

3、分析方法

首先了解什么是递推方程,递推方程是自然数上一个函数T(n), 它使用一个或多个小于n时的值的等式或者不等式来描述。也称为递归式或递推关系。
通常用递推方程来计算时间复杂度。

3.1 迭代法

  1. 计算和式:将递推式进行扩展,转变一个和式,通过计算和式来算出渐近复杂度,以Hanoi算法来进行演示。

  2. 递归树:可以形象的看到递推的过程,也属于迭代法,下面两道例题说明。

3.2 替换法

替换法首先要求猜测递推式的解,然后用归纳法证明。下面给出详细信息。

3.3 主方法(master method)



下次给出主方法的证明。

递归算法的时间复杂度的分析方法相关推荐

  1. 斐波那契数与二分法的递归与非递归算法及其复杂度分析

    1. 什么是斐波那契数? 这里我借用百度百科上的解释:斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏 ...

  2. 时间复杂度空间复杂度分析

    时间复杂度:   一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级.这里用"O"来表示数量级,给出算法的 ...

  3. 递归算法及其时间复杂度分析

    引言 "递归" 一词是比较专业的计算机术语,在现实生活中,有一个更可爱的词--"套娃".如果把"递归算法"叫做"套娃算法" ...

  4. 三种方法求递归算法的时间复杂度(递推,master定理,递归树)

    三种方法: 递推方法求递归算法的时间复杂性 Master定理方法求递归算法时间复杂性 递归树求解递归方程 1.递推方法求递归算法的时间复杂度 我们先来看一个经典的案例,汉诺塔问题 汉诺塔(Hanoi ...

  5. 算法:递归(借助递归树来求解分析递归算法的时间复杂度)

    递归代码的时间复杂度分析起来非常麻烦,今天我们尝试来借助递归树分析递归算法的时间复杂度. 1. 递归树与时间复杂度分析 递归的思想就是将大问题一层一层地分解为小问题来求解,如果我们把这个分解过程画成图 ...

  6. 递归树——分析递归算法的时间复杂度

    递归树 递归的思想就是,将大问题分解为小问题来求解,然后再将小问题分解为小小问题. 这样一层一层地分解,直到问题的数据规模被分解得足够小,不用继续递归分解为止. 如果我们把这个一层一层的分解过程画成图 ...

  7. 算法导论------递归算法的时间复杂度求解

    目录 1.算法设计与分析概述 2.非递归算法分析 3.递归算法分析 3.1利用数列知识 3.2代入法 3.3递归树 3.4主方法求解递推式 4.参考资料 1.算法设计与分析概述   在总结递归算法的时 ...

  8. 带你了解递归算法的时间复杂度

    用这篇article来给大家通透的讲一讲递归算法的时间复杂度. 同一道题目,同样使用递归算法,有的同学会写出了O(n)的代码,有的同学就写出了O(logn)的代码. 这是为什么呢? 如果我们对递归的时 ...

  9. [数据结构]递归树:借助树求解递归算法的时间复杂度

    文章目录 递归树与时间复杂度分析 实战一:分析快速排序的时间复杂度 实战二:分析斐波那契数列的时间复杂度 实战三:待补充,先学其他的... 递归树与时间复杂度分析 我们前面讲过,递归的思想就是,将大问 ...

最新文章

  1. Mac 建PHP 环境 及 配置 apache 默认目录
  2. C++ 中const的用法,特别是用在函数前面与后面的区别!
  3. Redis(四):Spring + JedisCluster操作Redis(集群)
  4. 强烈推荐:SiteServer CMS开源免费的企业级CMS系统!
  5. go 声明二维数组_一篇文章了解Go语言中数组Arrays的使用内幕
  6. 工作371-javascript判断数组为空
  7. MTK驱动(53)---平台DTS文件匹配过程
  8. 基于Linux内核红黑树的TR069参数解析工具:树形结构+CPE RPC支持
  9. httpclient+Jsoup总结
  10. IOS系统定时APP
  11. 遇到bug我会怎么做
  12. php 运行服务,php自动运行 win32service功能
  13. Qt 使用阿里图标库
  14. 数据处理SPSS的数据类型分析
  15. xshell过期/安装教程
  16. 计算几何——多边形面积
  17. 冰河竟然被腾讯邀请去做技术分享了,这是要起飞的节奏吗?
  18. NGINX脚本语言原理及源码分析(三)
  19. twitter验证_如何在Twitter上进行验证(或至少尝试一下)
  20. Amazon Alexa硬件方案选型

热门文章

  1. 什么是指令重排序?为什么要重排序?
  2. 报错:v-html will override element children 解决方法
  3. 【DSA_Fall2020】2. Trees (Templates in C)
  4. linux手机+华为,基于Linux打造,华为重磅宣布,开始在6款手机测试新系统
  5. 机器学习中对数据集进行拆分及模型训练
  6. 写了一个增量式的爬虫,但是并不完美,希望大牛们可以指正指正!
  7. Mysql命令insert into:向表中插入数据(记录)
  8. 触摸屏手机的工作原理是怎样的?
  9. 2022长安杯复盘——lucid凡
  10. GeekChallenge2020