回 帖 发 新 帖 刷新版面

主题:请大家帮忙找一小段程序中的bug

下面是彭国伦书中讲递归的一段代码(P195),兴趣来时,自己敲了一下试一试,发现注释掉框框中的部分之后再次编译运行会出现“段错误”的错误,而加上那一段(书中加上了)就能够正常运行。我当时只是认为那一段用途不大,懒得敲,所以就出现了这样奇怪的结果。还请前辈们指点一下,这是哪里的问题?谢谢了,已上传附件。
————————————————————————————————————————————————————————————————————————————————————————————
program ex
  implicit none
  integer::n
  integer,external::fact
  write(*,*)'N='
  read(*,*)n
  write(*,"(I2,'!=',I8)")n,fact(n)
  stop
end

recursive integer function fact(n)result(ans)
  implicit none
  integer,intent(in)::n

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! if(n<0)then                                !
!  ans=-1                                    !
!  return                                    !
! else if(n<=1)then                          !
!  ans=1                                     !
!  return                                    !
! end if                                     !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  ans=n*fact(n-1)
  return
end

回复列表 (共3个回复)

沙发

你去掉后,递归到哪里截止啊,不段错误才怪

板凳


哦,对,忘了,这是递归。哈哈多谢前辈

3 楼

当然是需要保留的了, 你这个是递归函数, 自己调用自己, 那肯定要有个跳出条件的. 注释的部分就是跳出条件啊.

我来回复

您尚未登录,请登录后再回复。点此登录或注册