求教一个空间复杂度问题

xiongfei100 2005-04-30 12:41:24
函数:

float rsum( float a[] , const int n){
if (n <=0 ) return 0 ;
else return rsum (a , n-1) + a[n-1] ;
}

“为了实现递归过程,用到了一个递归栈,每递归一层就要加一个工作记录到递归栈中,工作记录为形式参数(a[]的首地址a[0],n)、函数的返回值和返回地址保留了4个存储单元。由于算法的递归深度为n+1,故所需的栈空间是4(n+1)。”

这是清华大学出版社 数据结构(用面向对象方法与C++描述) 殷人昆等 著 这本书中第27页中讲的。

小弟想请教:为什么“函数的返回值和返回地址保留了4个存储单元”?怎么是4个?
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mathe 2005-04-30
  • 打赏
  • 举报
回复
我们现在一般使用的cpu都是Intel的x86体系的CPU,其中,所有对浮点数(float,或double)的操作都通过16个浮点寄存器进行.这16个浮点寄存器构成一个堆栈的形式,其中堆栈顶点的寄存器称为st(0),而下一个就是st(1),等等
xiongfei100 2005-04-30
  • 打赏
  • 举报
回复
谢谢各位!尤其是zara(Kyrie eleison)。请问st(0)s是什么?小弟初学数据结构,请指点迷津!不胜感激!
zhang_jiang 2005-04-30
  • 打赏
  • 举报
回复
谢谢zara的指正.

另: 到处都能看到你啊 ;-)
zara 2005-04-30
  • 打赏
  • 举报
回复
这个显然不是究于具体的平台的, 而只是逻辑上的 4 个存储单元. 而且, 实际上, 如果函数返回值是 float 类型的话, 一般是返回在 st(0) 的, 在浮点处理器的栈顶, 而不是程序的堆栈里的或者是 eax 中的
zhang_jiang 2005-04-30
  • 打赏
  • 举报
回复
> 工作记录为形式参数(a[]的首地址a[0],n)、函数的返回值和返回地址保留了4个存储单元。
是4个啊, 首地址, n, 返回值, 返回地址, 一共4个东东. 他没明确说存储单元的大小了.

但是我也个疑问, 返回值是保存在EAX中的. 怎么会是保存在栈中呢?
dext 2005-04-30
  • 打赏
  • 举报
回复
32位嘛!

33,008

社区成员

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

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