[問題] subroutine call 自己時的return

看板Fortran作者 (片翼碎夢)時間5年前 (2019/04/17 14:58), 編輯推噓2(2017)
留言19則, 2人參與, 5年前最新討論串1/1
隨便寫一個來當範例 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

04/17 15:38, 5年前 , 1F
我目前是猜說一個副程式會一直call別的副程式到最後
04/17 15:38, 1F

04/17 15:38, 5年前 , 2F
的return 可是當call自己時因為此時這個副程式是被c
04/17 15:38, 2F

04/17 15:38, 5年前 , 3F
all的 所有他其實會先再讀一行得到return後
04/17 15:38, 3F

04/17 15:38, 5年前 , 4F
先記住自己被call這件事,副程式消滅 call副程式
04/17 15:38, 4F

04/17 15:39, 5年前 , 5F
所以名稱用recursive 的用意是讓這個遞迴程式會在ca
04/17 15:39, 5F

04/17 15:39, 5年前 , 6F
ll 自己時,有特別往下讀一行來return
04/17 15:39, 6F

04/17 16:47, 5年前 , 7F
這2個return應該都能省略,call完會返回做同樣的事,直
04/17 16:47, 7F

04/17 16:47, 5年前 , 8F
到條件不符
04/17 16:47, 8F

04/18 10:58, 5年前 , 9F
不行喔 我一開始就是call自己後的return省略,導致
04/18 10:58, 9F

04/18 10:58, 5年前 , 10F
矩陣運送莫名爆掉(該遞迴設計上只會依據輸入x,y在
04/18 10:58, 10F

04/18 10:58, 5年前 , 11F
矩陣的某一格填入3,結果發生填到integer上限的狀況
04/18 10:58, 11F

04/18 10:58, 5年前 , 12F
顯示格式我設計(19i2) ,然後就一堆星號)
04/18 10:58, 12F

04/18 10:58, 5年前 , 13F
再比對一次彭國倫的77/90那本上的遞迴if寫法,把ret
04/18 10:58, 13F

04/18 10:58, 5年前 , 14F
urn在call自己那行的底下加上去才正常
04/18 10:58, 14F

04/18 10:59, 5年前 , 15F
與其說省略,應該說是沒注意到
04/18 10:59, 15F

04/18 11:00, 5年前 , 16F
矩陣運送>矩陣運算
04/18 11:00, 16F

04/18 11:05, 5年前 , 17F
而且就算是普通的subroutine 最後也還是要放個retur
04/18 11:05, 17F

04/18 11:05, 5年前 , 18F
n
04/18 11:05, 18F

04/18 15:41, 5年前 , 19F
04/18 15:41, 19F
文章代碼(AID): #1Sjiwli9 (Fortran)
文章代碼(AID): #1Sjiwli9 (Fortran)