递归
来源:互联网 发布:蹭网软件下载 编辑:程序博客网 时间:2024/06/13 06:18
任何调用自身的函数,都叫递归。
但系,
一定要保证递归能够终止
①.存在不再递归的基本情形
②.问题规模不断变小,最终收敛到基本情形
相关术语
基本情形(base case):函数不再递归嘅情形
递归情形(recursive case):函数调用自身作为子任务执行嘅情况
例如,求n!
假设 int Fact(int n) 为求 n! 的函数 分析情况,当 n=0 或 n=1 时,n! = 1 (基本情形) 当 n > 1时 ,n! = n*(n-1)! (递归情形)
所以
int Fact(int n){ //基本情形 if(n == 1) return 1; if(n == 0) return 1; //递归情形 else return n * Fact(n-1);}
递归和内存
递归调用会在内存产生新的函数副本,直到函数结束(返回数据),函数副本从内存中删除。
即,
Fun(3) -> Fun(2) -> Fun(1) 1 <- 1 <- return 1 最后删除Fun(3) <- 再删除Fun(2) <- 先删除Fun(1)
递归和迭代
官话:递归比迭代更加简洁易懂。当任务能被相似的子任务定义时,采用递归,即迭代(循环)都可转化为递归函数
递归
1)到达基本情形,必须终止
2)每次递归调用需要额外空间,用于栈帧(内存)开销
3)无穷情况,会栈溢出(耗尽内存),终止程序
迭代
1)循环条件为假,终止
2)迭代不需要额外嘅空间开销
3)出现死循环,无法终止程序
所以,
迭代比递归更有效(函数调用开销),但系,对于某些问题,无明显嘅迭代求解
阅读全文
0 0
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 利用PHPExcel导出Excel并设置Excel格式
- CodeForces #157(258A|258B|258C|258D|258E)|数位DP|搜索|线段树
- Could not connect to SMTP host: smtp.163.com, port: 25;阿里云 ECS
- Master启动的源码详解
- TCP网络编程中connect()、listen()和accept()三者之间的关系
- 递归
- Directx11教程四十三之glow(边缘发光)
- Word文档插图片问题
- 写接口请求类型为get或post的时,参数定义的几种方式,如何用注解(原创)--雷锋
- Linux C 进程间的IPC通信 之 共享内存(一)
- Ubuntu16.04搜狗拼音输入法候选栏无法显示中文(英文乱码)
- pstree使用缺少命令
- 浅谈反射
- MyBatis概述