[问题] 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