首页 > 编程知识 正文

递归和迭代的时间复杂度,任何一个递归都可以转化为非递归

时间:2023-05-04 15:34:37 阅读:110432 作者:4349

递归就是自己呼叫自己。

首先,您需要弄清楚函数是如何调用的。 在执行调优的函数之前,系统必须执行三件事。

1 .将自变量、函数的返回地址等信息传递给被调函数进行保存。

2 .局部变量为函数被删除的参数分配空间

3 .将控制转移到被调函数的入口。

从被调函数返回之前,也需要做三件事。

1 .保存函数返回结果

2 .释放被调制函数的存储空间

3 .根据被调函数中保存的返回地址,将控制转移到调用函数。

其中主调函数和被调函数之间的参数传递和控制转移通过栈实现,计算机只能操作栈顶元素。 调用下降函数时,堆栈下降函数的数据空间会将控制权转移给下降函数。函数结束后,被调制函数被堆栈,控制权再次返回主调函数。

由此可见,计算机程序调用另一个程序和调用自己没有区别,同样也在做上述事情。

与常见的迭代相比,递归具有以下特征:

1 .递归与人的“逆向思维”相近,但反复不用脑子直接进行。

2 .由于手续的复杂性,递归短,迭代长。

3 .在执行效率方面,递归效率较低,函数调用会做很多事情,所以迭代效率高。

4 .程序有错误时,容易发现反复的错误,但递归的错误很难发现。

到底什么时候使用递归,什么时候使用迭代呢? 如果你不想用一点自己的脑子,让计算机更累,你可以自己考虑使用递归的每一步,如果计算机想直接执行,你可以使用迭代。

其实,并不是所有的问题都可以转化为递归问题。 使用递归分析问题时,必须保证使用递归后问题的本质没有发生变化。 但是,当规模变小,且规模缩小到一定程度时,我就能解开他。

To iterate is human,torecursedivine.—— l.Peter Deutsch

迭代是人,递归是神。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。