求教:怎么用栈模拟尾递归

u011005466 2013-06-08 06:28:34
本人有个坏习惯,就是什么递归算法都喜欢用栈模拟、、
比如什么快排啊,dfs啊。。而且一定要用链表模拟的栈,随时动态释放的那种、
然后我想了无数堂课(学生党上课不听课请无视、、、),没想明白怎么用栈模拟尾递归、
出栈顺序好像不太靠谱、、
Sort(A,x,y)
Pretiton(A,x,y)
if x+1>=y
then return
Sort(A,x,x+下取整(y-x-1)/2)
Sort(A,x+下取整(y-x-1)/2+1,y)

Pretiton(A,x,y)
for i←0 to 下取整(y-x-1)/2
if A[x+i]>A[y-i]
then
exchange A[x+i]←->A[y-i]
if x+1>=y
then return
Pretiton(A,x,x+下取整(y-x-1)/2)
Pretiton(A,x+下取整(y-x-1)/2+1,y)
for i←0 to 下取整(y-x-1)/2
if A[x+i]>A[y-i]
then
exchange A[x+i]←->A[y-i]
if x+1>=y
then return
这个怎么改?(我写的是伪代码。大神们用c、c++/c#/java/vb/pascal回复我都看得懂得,麻烦大神们了)
...全文
328 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
WizardOz 2013-06-14
  • 打赏
  • 举报
回复
尾递归不需要栈。
FancyMouse 2013-06-09
  • 打赏
  • 举报
回复
任何递归调用都能用栈做。直接用标准模型做就是了。 尾递归不用栈也能做,这是优化。 你的Partition/Sort都不是尾递归。
小呆呆呆 2013-06-09
  • 打赏
  • 举报
回复
Sort(A,x,y) Pretiton(A,x,y) if x+1>=y then return Sort(A,x,x+下取整(y-x-1)/2) Sort(A,x+下取整(y-x-1)/2+1,y) 你的Sort确实是尾递归 尾递归可以迭代替换 void sort(A,p,q) { while(p<r) { q = partition(A,p,q); p = q+1; } }

33,029

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧