所有迭代程序都可以转换成等价的递归,反之则不然。但是所有的递归程序都可以通过添加一个栈变成循环的程

所有迭代程序都可以转换成等价的递归,反之则不然。但是所有的递归程序都可以通过添加一个栈变成循环的程,第1张

从理论上来说是可以的,但有些算法递归来描述会更加简洁和思路清晰虽然性能上要比迭代要慢。就目前来说有些算法用递归要想转换成迭代还是比较复杂的,就比如典型的汉诺塔问题,尽管网上流传说已有人使用迭代解决了,但它的正确性是否得到了研究界人士的肯定这点尚未到得证实。目前普遍还是采用递归来实现它。

能力有限,仅知几点

两者都是重复某一 *** 作直到满足条件为止。

不同之处在于,递归是函数调用自身,而迭代是使用循环。

某些情况下递归更加简单,可读性更高,而用循环则十分复杂。如二分法,快速排序等。

递归很容易导致栈溢出,导致程序崩溃,而循环不会。

综上所述,能用循环用循环,递归是万不得已的手段。

“递归”和“迭代”的区别如下:

1、递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合。

2、迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B。

3、递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出。

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7949932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存