怎么判断一个问题是不是递归的
来源:互联网 发布:mac pro能玩什么游戏 编辑:程序博客网 时间:2024/05/17 07:24
递归,怎么理解这个概念?我们不需要用复杂的语言来描述这个概念,只需要从这个词的本意入手即可。递归的英文也就是recursion,这个词的词源是recur,我们都知道occur的意思是发生,那么recur的意思也就不难理解了,也就是重复发生。所以说,递归,就是指一个事情周期性重复发生,也就是说,在一个算法里,如果一个方法被重复调用,那么这个方法就有可能是递归的。
那么怎么判断一个问题是否能用递归的方法来解?这可以从三方面去考虑。
1. 这个问题的定义是不是递归的?
比较典型的就是Fibonacci数列和阶乘问题,这两个问题本身都包含了递归的过程,因此很容易判断出可以用递归法去解。
2. 数据本身是不是递归的?
这类情况中,比较典型的是链表和二叉树。判断一个数据是不是递归结构,关键点在于局部数据和全局数据的结构是不是一样的,拿单向链表来说,每一个节点都有一个数据,一个指向它的指针和一个指向下一个节点的指针,而整个链表也是这种结构,因此链表是递归结构。而对于二叉树则是一个道理,二叉树的任意一棵子树都和它本身具备相同的结构。因此,操作这类数据都可以选择递归。
3. 问题的解法是不是递归的?
这种情况稍难判断一点,需要程序员在自己的脑中模拟一下问题的解决过程,从而找出递归关系。最经典的例子莫过于汉诺塔,在移动盘子的过程中,每一次移动底层盘子,都需要把上层的盘子移开,而每次移动的方法又都是相同的,因此是比较典型的递归问题。
在各种算法教材上几乎都把递归作为第一个介绍的算法,但是个人认为递归其实并不是那么好理解,想正确的判断出递归,并且应用递归,是需要大量练习的。
- 怎么判断一个问题是不是递归的
- 怎么判断一个数是不是2的N次方
- 怎么判断一个数是不是2的n次方
- JAVA中 怎么判断输入的字符串是不是一个数字
- 递归判断一个数是不是回文数
- 怎么判断一个序列是不是堆?
- 怎么判断一个序列是不是堆?
- 怎么判断一个序列是不是堆?
- [算法问题]判断一个数是不是2的幂?
- 判断一个数是不是2的幂类似问题
- 判断一个文件是不是excel格式的
- 判断一个数是不是2的乘方
- 判断一个程序员是不是好的程序员
- 判断一个数是不是2的幂
- 判断一个整数是不是2的幂
- 判断一个数是不是特殊的三位数
- 判断一个字符串的字符是不是唯一
- 判断一个数是不是2的幂
- 主题:基于全注解方式的SSH基础框架
- Linux命令行与图形界面切换
- 分享Silverlight/WPF/Windows Phone一周学习导读(10月22日-10月29日)
- 中通2008通信概预算编制系统简介
- C# 回车与换行
- 怎么判断一个问题是不是递归的
- ubuntu下如何切换到root账号
- Linux虚拟系统安装VMware Tools总结
- 84. Better to ask the way than go astray. 问路总比迷路好
- Lady Gaga是BT下载狂热者
- sql2008常用服务帐户详解
- 结构模式之装饰模式注解
- Stack(1)Stack的顺序实现
- MATLAB与C/C++混合编程之MATLAB调用C程序