关于递归的问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 02:49:41
听说递归浪费计算机操作时间和内存空间。无论是时间复杂度还是空间复杂度都不可以选递归。但为什么有人说递归为神,迭代为人呢?
我当然已经知道递归很简洁,但是,不至于递归为神吧。我就是想问下,递归有什么高深的原因。谢谢。

递归有人工智能的感觉,
有些类似逻辑思索的计算,
有些例如数列等递推的计算,
用递归法代码简单而有效。

例如汉诺塔,例如下棋的下一步搜索。
例如2叉树的操作。

掌握了递归的思想,在有时可以巧妙地解决问题。
所以最好还是多练习练习。
不太懂就用单步运行和变量Watch仔细感觉
递归运行的原理。

递归能当复杂的问题用简单的形式解决,但是它不是效率最高的。
比如大家都知道的求阶乘的算法,递归解决这个问题只要4行就能解决。但是经过对比测试,比起其它算法,递归效率差得太多了。

“无论是时间复杂度还是空间复杂度都不可以选递归”,这个恐怕太武断了。
虽说有许多递归的问题都可以化为迭代,但不是所有的都可以化。

如果有更好的选择,那么何乐而不为呢?
如果没有更好的选择,能够解决问题的算法就是好算法。

递归是一种很好的解决编程问题的方法。
对于很多问题,看似很复杂,但他可分解为很多形式相同的小问题,而这每一个小问题又可继续分解为很多形式相同的小问题。
对于符合这样要求的问题,使用递归就是一个不错的选择。比如说汉罗塔求解的问题,选用递归应该就是最佳选择。
但要是不符合这样形式的问题,最好就不要用递归了,因为这样会多消耗很多内存空间。比如说求解最大公约数的问题,就不要写成:
int fun(int m,int n)
{ if(n%m==0) return m;
return fun(m%n,m);
}
对于递归好不好,不能一概而论,要具体问题具体分析。而且,对于同一个问题的递归算法也可能有好几种,再编写递归程序时,要尽可能的选择递归深度最小的那种。
至于什么时候改用递归,如何编写递归函数,就只能靠平时的经验积累了。

一般人做不好递归。。。。