您好、欢迎来到现金彩票网!
当前位置:在线斗牛棋牌游戏 > 尾递归 >

为什么快速排序不能用尾递归来实现

发布时间:2019-05-29 01:22 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  知道合伙人数码行家采纳数:118957获赞数:420005长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。向TA提问展开全部任何通过把大问题分成小问题一一解决,再将其结果一一拼接起来的算法,都是不可能实现尾递归的。因为解决每个小问题的时候,必须保存得到此小问题的过程中的所有分块信息(调用帧)。

  2018-10-26展开全部递归过程中需要子过程计算返回结果的过程才必须要入栈。快速排序是先比较换位之后再把结果分发给两个子过程,在执行完最后一个子过程之后程序自动结束,所以是尾递归的。而归并排序需要最后一个子过程先排序,再逐级返回,继续归并,所以不是尾递归。写程序的时候能看出来,快速排序的递归调用都是在函数尾部,归并排序的递归调用都在函数头部。这才是尾递归和非尾递归的区别。

  所有递归都可以写成迭代,但是尾递归可以写成真正的迭代,非尾递归依旧需要一个辅助结构来模拟或者说代替递归所用的栈结构。不过根据问题的不同和栈结构的实现技巧,很多非尾递归问题都是可以通过改写成迭代来提高性能(节约空间或者时间)的。最明显的例子就是斐波那契数列。斐波那契数列递归过程中一定要先入栈,直到压入f(0)和f(1)时才能开始出栈,所以不是尾递归的,但是通过一块内存暂存上一步的结果就可以直接从f(0)和f(1)开始计算得到f(n)的值,这样就省去了递归消耗的栈空间以及入栈出栈的时间开销,所以时间和内存占用都小得多。

http://missartypants.com/weidigui/31.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有