作者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/cn.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