作者dodo302 (dodo)
站内C_and_CPP
标题Re: [问题] 递回的定义?
时间Thu Apr 9 04:06:35 2009
※ 引述《HowLeeHi (处处留心皆正妹)》之铭言:
: 递回的定义是:function自己叫呼自己,就可称为递回
: 可是我看到一个网页
: http://squall.cs.ntou.edu.tw/cprog/Materials/Recursive.html
: 最下面它说Fortran是没有办法做递回的
: 看了一下它的解释,似乎是说fortran是使用call by reference的关系
: 不过程式语言的递回不就是function自己呼叫自己,
: 不管有没有传值、不管传值是使用call by reference或call by value
: 都可称作递回吗??
我在某本书里看到的是说 早期的CPU是没有堆叠的
没有堆叠就不能放返回位址
所以没有CALL function的概念 只有jump(goto)这个语法,
然後到了6502(红白机的晶片)就有堆叠了,才可以做call跟递回
然後程式语言才开始有这方面的语法
所以很古早味的fortran是没有递回的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.234.45
1F:→ sunneo:堆叠应该不属於cpu的管理范围吧 04/09 04:08
2F:→ sunneo:只要有办法写入记忆体以及两个暂存器 就可以模拟堆叠了 04/09 04:09
3F:推 springman:我的印象是早期的 FORTRAN 为了效率问题 04/09 06:12
4F:→ springman:不使用动态记忆体,所以没有指标、没有堆叠 04/09 06:13
5F:→ springman:当然,也没有递回的功能。新的 FORTRAN 应该有了吧 04/09 06:13
6F:→ MOONRAKER:哪可能到6502才有堆叠,你看那啥书,不要听他BS 04/09 10:05
7F:→ MOONRAKER:至少8080就有了,再之前DEC的PDP也有 04/09 10:07
8F:→ tomnelson:简单一句话这样说吧! 递回function在进到最後一层後, 由 04/10 02:20
9F:→ tomnelson:於要往上一层返回, 而且要依序往上一层返回并传回结果, 04/10 02:22
10F:→ tomnelson:所以必须在先前一层一层进入时储存目前结果, 所以须要有 04/10 02:23
11F:→ tomnelson:stack的结构来存资料, 这是LIFO(Last In First Out), 不 04/10 02:26
12F:→ tomnelson:就刚好符合上面一层层进入再一层层退出的行为模式吗? 所 04/10 02:28
13F:→ tomnelson:以早期无法支援stack的机器上, 就无法支援递回罗! 但是 04/10 02:29
14F:→ tomnelson:用其他方式其实还是可以办到的!(模拟stack) 04/10 02:30