递归算法的时间复杂度的分析方法
一、前置疑问
Q1、什么是递归
Q2、如何分析递归算法
二、学习内容
1、递归的定义
递归是一种直接调用自己或者间接调用自身的方法。递归由两个部分组成。
- 基础情况:即最简单情况时可以直接输出,是递归出口。
- 递归部分:递归部分的类型和整个类型是相同的。
2、几个常见的递归程序
- 斐波那契数列
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 #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 #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 迭代法
计算和式:将递推式进行扩展,转变一个和式,通过计算和式来算出渐近复杂度,以Hanoi算法来进行演示。
递归树:可以形象的看到递推的过程,也属于迭代法,下面两道例题说明。
3.2 替换法
替换法首先要求猜测递推式的解,然后用归纳法证明。下面给出详细信息。
3.3 主方法(master method)
下次给出主方法的证明。
递归算法的时间复杂度的分析方法相关推荐
- 斐波那契数与二分法的递归与非递归算法及其复杂度分析
1. 什么是斐波那契数? 这里我借用百度百科上的解释:斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏 ...
- 时间复杂度空间复杂度分析
时间复杂度: 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级.这里用"O"来表示数量级,给出算法的 ...
- 递归算法及其时间复杂度分析
引言 "递归" 一词是比较专业的计算机术语,在现实生活中,有一个更可爱的词--"套娃".如果把"递归算法"叫做"套娃算法" ...
- 三种方法求递归算法的时间复杂度(递推,master定理,递归树)
三种方法: 递推方法求递归算法的时间复杂性 Master定理方法求递归算法时间复杂性 递归树求解递归方程 1.递推方法求递归算法的时间复杂度 我们先来看一个经典的案例,汉诺塔问题 汉诺塔(Hanoi ...
- 算法:递归(借助递归树来求解分析递归算法的时间复杂度)
递归代码的时间复杂度分析起来非常麻烦,今天我们尝试来借助递归树分析递归算法的时间复杂度. 1. 递归树与时间复杂度分析 递归的思想就是将大问题一层一层地分解为小问题来求解,如果我们把这个分解过程画成图 ...
- 递归树——分析递归算法的时间复杂度
递归树 递归的思想就是,将大问题分解为小问题来求解,然后再将小问题分解为小小问题. 这样一层一层地分解,直到问题的数据规模被分解得足够小,不用继续递归分解为止. 如果我们把这个一层一层的分解过程画成图 ...
- 算法导论------递归算法的时间复杂度求解
目录 1.算法设计与分析概述 2.非递归算法分析 3.递归算法分析 3.1利用数列知识 3.2代入法 3.3递归树 3.4主方法求解递推式 4.参考资料 1.算法设计与分析概述 在总结递归算法的时 ...
- 带你了解递归算法的时间复杂度
用这篇article来给大家通透的讲一讲递归算法的时间复杂度. 同一道题目,同样使用递归算法,有的同学会写出了O(n)的代码,有的同学就写出了O(logn)的代码. 这是为什么呢? 如果我们对递归的时 ...
- [数据结构]递归树:借助树求解递归算法的时间复杂度
文章目录 递归树与时间复杂度分析 实战一:分析快速排序的时间复杂度 实战二:分析斐波那契数列的时间复杂度 实战三:待补充,先学其他的... 递归树与时间复杂度分析 我们前面讲过,递归的思想就是,将大问 ...
最新文章
- Mac 建PHP 环境 及 配置 apache 默认目录
- C++ 中const的用法,特别是用在函数前面与后面的区别!
- Redis(四):Spring + JedisCluster操作Redis(集群)
- 强烈推荐:SiteServer CMS开源免费的企业级CMS系统!
- go 声明二维数组_一篇文章了解Go语言中数组Arrays的使用内幕
- 工作371-javascript判断数组为空
- MTK驱动(53)---平台DTS文件匹配过程
- 基于Linux内核红黑树的TR069参数解析工具:树形结构+CPE RPC支持
- httpclient+Jsoup总结
- IOS系统定时APP
- 遇到bug我会怎么做
- php 运行服务,php自动运行 win32service功能
- Qt 使用阿里图标库
- 数据处理SPSS的数据类型分析
- xshell过期/安装教程
- 计算几何——多边形面积
- 冰河竟然被腾讯邀请去做技术分享了,这是要起飞的节奏吗?
- NGINX脚本语言原理及源码分析(三)
- twitter验证_如何在Twitter上进行验证(或至少尝试一下)
- Amazon Alexa硬件方案选型
热门文章
- 什么是指令重排序?为什么要重排序?
- 报错:v-html will override element children 解决方法
- 【DSA_Fall2020】2. Trees (Templates in C)
- linux手机+华为,基于Linux打造,华为重磅宣布,开始在6款手机测试新系统
- 机器学习中对数据集进行拆分及模型训练
- 写了一个增量式的爬虫,但是并不完美,希望大牛们可以指正指正!
- Mysql命令insert into:向表中插入数据(记录)
- 触摸屏手机的工作原理是怎样的?
- 2022长安杯复盘——lucid凡
- GeekChallenge2020