[問題] subroutine call 自己時的return

作者: fragmentwing (片翼碎夢)   2019-04-17 14:58:52
隨便寫一個來當範例
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 怎麼辨識的?
作者: fragmentwing (片翼碎夢)   2019-04-17 15:38:00
我目前是猜說一個副程式會一直call別的副程式到最後的return 可是當call自己時因為此時這個副程式是被call的 所有他其實會先再讀一行得到return後先記住自己被call這件事,副程式消滅 call副程式所以名稱用recursive 的用意是讓這個遞迴程式會在call 自己時,有特別往下讀一行來return
作者: espresso1   2019-04-17 16:47:00
這2個return應該都能省略,call完會返回做同樣的事,直到條件不符
作者: fragmentwing (片翼碎夢)   2019-04-18 10:58:00
不行喔 我一開始就是call自己後的return省略,導致矩陣運送莫名爆掉(該遞迴設計上只會依據輸入x,y在矩陣的某一格填入3,結果發生填到integer上限的狀況顯示格式我設計(19i2) ,然後就一堆星號)再比對一次彭國倫的77/90那本上的遞迴if寫法,把return在call自己那行的底下加上去才正常與其說省略,應該說是沒注意到矩陣運送>矩陣運算而且就算是普通的subroutine 最後也還是要放個return
作者: espresso1   2019-04-18 15:41:00

Links booklink

Contact Us: admin [ a t ] ucptt.com