Re: [問題] 遞迴的定義?

看板C_and_CPP作者 (dodo)時間15年前 (2009/04/09 04:06), 編輯推噓1(1013)
留言14則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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

04/09 04:08, , 1F
堆疊應該不屬於cpu的管理範圍吧
04/09 04:08, 1F

04/09 04:09, , 2F
只要有辦法寫入記憶體以及兩個暫存器 就可以模擬堆疊了
04/09 04:09, 2F

04/09 06:12, , 3F
我的印象是早期的 FORTRAN 為了效率問題
04/09 06:12, 3F

04/09 06:13, , 4F
不使用動態記憶體,所以沒有指標、沒有堆疊
04/09 06:13, 4F

04/09 06:13, , 5F
當然,也沒有遞迴的功能。新的 FORTRAN 應該有了吧
04/09 06:13, 5F

04/09 10:05, , 6F
哪可能到6502才有堆疊,你看那啥書,不要聽他BS
04/09 10:05, 6F

04/09 10:07, , 7F
至少8080就有了,再之前DEC的PDP也有
04/09 10:07, 7F

04/10 02:20, , 8F
簡單一句話這樣說吧! 遞迴function在進到最後一層後, 由
04/10 02:20, 8F

04/10 02:22, , 9F
於要往上一層返回, 而且要依序往上一層返回並傳回結果,
04/10 02:22, 9F

04/10 02:23, , 10F
所以必須在先前一層一層進入時儲存目前結果, 所以須要有
04/10 02:23, 10F

04/10 02:26, , 11F
stack的結構來存資料, 這是LIFO(Last In First Out), 不
04/10 02:26, 11F

04/10 02:28, , 12F
就剛好符合上面一層層進入再一層層退出的行為模式嗎? 所
04/10 02:28, 12F

04/10 02:29, , 13F
以早期無法支援stack的機器上, 就無法支援遞迴囉! 但是
04/10 02:29, 13F

04/10 02:30, , 14F
用其他方式其實還是可以辦到的!(模擬stack)
04/10 02:30, 14F
文章代碼(AID): #19tGFC8I (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19tGFC8I (C_and_CPP)