作者fragmentwing (片翼碎夢)
看板Fortran
標題[問題] subroutine call 自己時的return
時間Wed Apr 17 14:58:52 2019
隨便寫一個來當範例
recursive subroutine a(x)
implicit none
integer :: x
if(x.gt.1)then
x=x-1
call a(x)
return
else
call b(x)
end if
return
end
這是一個用來讓x小於等於1時就傳入副程式來處理的遞迴副程式
雖然上次程式作業寫了十一個遞迴,我還是不明白
call a(x) (叫自己)那行下面為何要return
但是 call b(x) 的時候可以等到最後的return就好
他return的到底是先叫的 a還是後來叫來的a 怎麼辨識的?
--
羽毛未豐的片片翅翼,零落四散在各個時間的夢想
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.139.169.241
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Fortran/M.1555484335.A.B09.html
1F:→ fragmentwing: 我目前是猜說一個副程式會一直call別的副程式到最後 04/17 15:38
2F:→ fragmentwing: 的return 可是當call自己時因為此時這個副程式是被c 04/17 15:38
3F:→ fragmentwing: all的 所有他其實會先再讀一行得到return後 04/17 15:38
4F:→ fragmentwing: 先記住自己被call這件事,副程式消滅 call副程式 04/17 15:38
5F:→ fragmentwing: 所以名稱用recursive 的用意是讓這個遞迴程式會在ca 04/17 15:39
6F:→ fragmentwing: ll 自己時,有特別往下讀一行來return 04/17 15:39
7F:推 espresso1: 這2個return應該都能省略,call完會返回做同樣的事,直 04/17 16:47
8F:→ espresso1: 到條件不符 04/17 16:47
9F:→ fragmentwing: 不行喔 我一開始就是call自己後的return省略,導致 04/18 10:58
10F:→ fragmentwing: 矩陣運送莫名爆掉(該遞迴設計上只會依據輸入x,y在 04/18 10:58
11F:→ fragmentwing: 矩陣的某一格填入3,結果發生填到integer上限的狀況 04/18 10:58
12F:→ fragmentwing: 顯示格式我設計(19i2) ,然後就一堆星號) 04/18 10:58
13F:→ fragmentwing: 再比對一次彭國倫的77/90那本上的遞迴if寫法,把ret 04/18 10:58
14F:→ fragmentwing: urn在call自己那行的底下加上去才正常 04/18 10:58
15F:→ fragmentwing: 與其說省略,應該說是沒注意到 04/18 10:59
16F:→ fragmentwing: 矩陣運送>矩陣運算 04/18 11:00
17F:→ fragmentwing: 而且就算是普通的subroutine 最後也還是要放個retur 04/18 11:05
18F:→ fragmentwing: n 04/18 11:05
19F:推 espresso1: 推 04/18 15:41