一个递归问题

7680 2002-01-18 01:54:40
long fib(int x)
{
if(x>2)
return(fib(x-1)+fib(x-2));
else
return 1;
}

这是个简单的递归问题,我想知道的是,在这一系列的函数调用中,返回值是存放在临时变量中的,那它到底是存放在什么地方的,比如说这个例子中,两个返回值要相加,那肯定是要确定地址才行吧,那程序是怎么处理的呢,难道是由操作系统来完成的?

...全文
127 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
7680 2002-01-18
  • 打赏
  • 举报
回复
结了,栈操作就算了,我比较熟悉了
Francky 2002-01-18
  • 打赏
  • 举报
回复
用过asm的就知道,返回是放在 DX:AX寄存器中的。
loveisbug 2002-01-18
  • 打赏
  • 举报
回复
是你自己没有问清楚啊,原问里你说不知道局部变量的存放在哪,有人说了栈,你说知道,那不结啦?栈是实际的内存,当然有地址的,当然也可以相加呀,抱着脑袋想不明白,我不说了,画个栈操练一番就很清楚啦。
要说是怎么加的,编译器可没做什么动作,编译器就是翻译成指令,有操作数和地址的指令,具体的相加动作是指令完成的,是CPU做的。
7680 2002-01-18
  • 打赏
  • 举报
回复
唉,没说到关键,还是2ndboy(丢丢)说了我想问了问题,不过不知道对不对
loveisbug 2002-01-18
  • 打赏
  • 举报
回复
自己画一个栈,按执行过程画一遍就知道啦。
qbhua 2002-01-18
  • 打赏
  • 举报
回复
去看一下数据结构,递归转化为非递归的算法。通常借助于栈来实现的。当函数调用的时候压栈,返回的时候弹栈。
参数,返回值等都放在栈中。
7680 2002-01-18
  • 打赏
  • 举报
回复
呵呵,我觉得也是编译器自己搞定的,放一下,如果没有更好的回答,晚上结
2ndboy 2002-01-18
  • 打赏
  • 举报
回复
呵呵,编译器问题
7680 2002-01-18
  • 打赏
  • 举报
回复
不是的,我知道是栈,关键是函数调用时返回值是存放在临时变量中的,他们是怎么相加了?
Francky 2002-01-18
  • 打赏
  • 举报
回复
栈!当一个函数被调用时,在栈中将为这个函数所有局部自动变量分配空间,栈同时还保存其它信息。
eion 2002-01-18
  • 打赏
  • 举报
回复
返回值都在里堆栈
alou 2002-01-18
  • 打赏
  • 举报
回复
栈。

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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