【总结帖】关于递归
来源:互联网 发布:985 211文件失效 知乎 编辑:程序博客网 时间:2024/05/21 12:48
1.什么是递归?
在函数或子过程的内部,直接或者间接地调用自己的算法。
我自己通俗的理解是:要解决当前这个问题,就要先解决另一个问题,顾名思义,先递后归。
例如,做一碗面条,就要先完成放面入锅的操作,而这个操作的前提又是水烧滚,烧水之前还要先放油。所以,第一个操作就是放油,然后烧水,然后放面,最后出锅。
一句话就是:由结论入手,摸索到前提,最后从前提出发。
就像数学里的证明题,也像一些博主说的数学归纳法,高中做数列的时候也是这个道理。典型的递归有:汉诺塔问题,阶乘,斐波那契数列等。
2.为什么要用递归?
众所周知,递归在空间性能方面是非常糟糕的。那我们为什么还要用递归?有两个原因:
a.首先对于无限循环,用for肯定是无法实现的;而且递归也适用于不定长字段;
b.递归的语句简洁,虽然难理解一点。
3.如何设计递归算法?
首先,要确定两件事:
1.确定递归公式
2.确定边界(终了)条件
接下来,我们来剖析递归的结构:
void func( mode){ if(endCondition) //结束状态(类似于数列的首项,或者说数学归纳法的前面几项) { constExpression //基本项 } else { accumrateExpreesion //归纳项(类似于数列的通项) mode=expression //步进表达式(数列里第n项和第n-1项的关系) func(mode) //调用本身,递归 }}
// 递归计算阶乘int factorial(n){ if(n == 1) {//首项0! = 1; return 1; } return n * factorial(n-1); //和第n项的关系(步进表达式)}
4.哪些情况适合用递归?
1.可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。2.存在一种简单情境,可以使递归在简单情境下退出。
5.总结:
递归的基本思想是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。
参考博文:
http://www.nowamagic.net/librarys/veda/detail/2316
阅读全文
0 0
- 【总结帖】关于递归
- 关于递归(recursion)的总结
- 关于递归自己的总结
- 关于算法递归的总结
- java中关于递归的一些总结
- 关于DFS和递归的一点总结
- 关于C++递归函数的学习总结
- 关于汉诺塔递归算法的总结
- LintCode 关于递归问题的总结
- C/C++中关于递归的实现细节的总结
- 关于二叉树的非递归算法总结
- 关于递归
- 关于递归
- 关于递归
- 关于递归
- 关于递归
- 关于递归
- 关于递归
- 实验二
- Java day3
- python django-admin startproject django-admin命令未找到
- VS 如何使用外部程序调试dll程序
- spring mybatis 之MapperFactoryBean
- 【总结帖】关于递归
- ios-SQLite基本使用
- 我的第一节C语言课
- tensorflow中保存模型、加载模型做预测(不需要再定义网络结构)
- 数据结构|创建学生成绩的静态链表(实验2.4)
- 间接寻址的基本及其应用(实验2.4)
- Java日期时间相关的类
- Hibernate一对多保存思考题
- #Java 核心技术卷一阅读笔记# 第十二章 Swing用户界面组件