看板 Fortran 關於我們 聯絡資訊
隨便寫一個來當範例 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://www.ptt.cc/bbs/Fortran/M.1555484335.A.B09.html
fragmentwing: 我目前是猜說一個副程式會一直call別的副程式到最後 04/17 15:38
fragmentwing: 的return 可是當call自己時因為此時這個副程式是被c 04/17 15:38
fragmentwing: all的 所有他其實會先再讀一行得到return後 04/17 15:38
fragmentwing: 先記住自己被call這件事,副程式消滅 call副程式 04/17 15:38
fragmentwing: 所以名稱用recursive 的用意是讓這個遞迴程式會在ca 04/17 15:39
fragmentwing: ll 自己時,有特別往下讀一行來return 04/17 15:39
espresso1: 這2個return應該都能省略,call完會返回做同樣的事,直 04/17 16:47
espresso1: 到條件不符 04/17 16:47
fragmentwing: 不行喔 我一開始就是call自己後的return省略,導致 04/18 10:58
fragmentwing: 矩陣運送莫名爆掉(該遞迴設計上只會依據輸入x,y在 04/18 10:58
fragmentwing: 矩陣的某一格填入3,結果發生填到integer上限的狀況 04/18 10:58
fragmentwing: 顯示格式我設計(19i2) ,然後就一堆星號) 04/18 10:58
fragmentwing: 再比對一次彭國倫的77/90那本上的遞迴if寫法,把ret 04/18 10:58
fragmentwing: urn在call自己那行的底下加上去才正常 04/18 10:58
fragmentwing: 與其說省略,應該說是沒注意到 04/18 10:59
fragmentwing: 矩陣運送>矩陣運算 04/18 11:00
fragmentwing: 而且就算是普通的subroutine 最後也還是要放個retur 04/18 11:05
fragmentwing: n 04/18 11:05
espresso1: 推 04/18 15:41