24小时热门版块排行榜    

查看: 1416  |  回复: 3

chenhuis

银虫 (小有名气)

[交流] fortran中的内部函数可以递归吗?已有1人参与

下面的程序加了external之后不能通过编译,去掉之后可以运行,这个程序是彭国伦那本书的201页,我有疑问,这个程序的子函数fact为什么在主程序中用externa语句声明?如果是自定义函数不是都在主程序中必须声明么?
还有contains 可以设置一个内部函数,如果一个函数被设置成内部函数,那么他就不能自己递归么?
这个程序是应为有了contains才不用external吗?
总之在自定义函数有interface和contains的情况下都不写external吗?
小弟刚学fortran,概念不清晰,请各位大侠明示!


program pp1
implicit none
integer ::n
integer,external::fact
write(*,*)'N,'
read(*,*)n
write(*,"(I2,'!=',I8)"n,fact(n)
pause

contains
recursive integer function fact(n)result(ans)
implicit none
integer,intent(in)::n
integer,save::count=1
integer::localcount,temp
localcount=count
count=count+1
write(6,"(I2,'th enter,n=',I2)"localcount,n
if(n<0)then
  ans=-1
  write(6,"(I2,'th exit,n=',I2,' ans=',I8)"localcount,n,ans
  return
else if(n<=1)then
  ans=1
  write(6,"(I2,'th exit,n=',I2,' ans=',I8)"localcount,n,ans
  return
end if
temp=n-1
ans=n*fact(temp)
  write(6,"(I2,'th exit,n=',I2,' ans=',I8)"localcount,n,ans
  return
end function fact

end program pp1

[ Last edited by chenhuis on 2011-11-3 at 21:31 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


小木虫(金币+0.5):给个红包,谢谢回帖
我这里加或者不加都不能编译,只有把那句去掉才能正常编译……
2楼2011-11-03 21:48:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chenhuis

银虫 (小有名气)

引用回帖:
2楼: Originally posted by snoopyzhao at 2011-11-03 21:48:33:
我这里加或者不加都不能编译,只有把那句去掉才能正常编译……

什么原因啊?还有使用了contains,还可以递归吗?contains不是设置为内部函数么?
3楼2011-11-03 21:59:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+1): 感谢参与 2011-11-04 23:40:30
因为 contains 了,所以不用特别声明啊……下面这个是可以编译的,呵呵……
CODE:
program test_factorial
    implicit none
    print*, "12! =", factorial(12)

    contains
   
    recursive function factorial(n) result(factorial_result)
        integer, intent(in) :: n
        integer :: factorial_result
        if (n <= 0) then
            factorial_result = 1
        else
            factorial_result = n * factorial(n - 1)
        end if
    end function factorial

end program test_factorial

4楼2011-11-04 18:33:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chenhuis 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[教师之家] 请问事业编制和年薪制冲突吗? +11 ZHONGWU_U 2024-06-14 11/550 2024-06-18 12:26 by zqx1990
[基金申请] 有人中过人文社科类的博后特助吗? +3 outsider1986 2024-06-16 5/250 2024-06-18 11:10 by 袁天未然
[精细化工] 试剂价格 +3 旭必上岸 2024-06-17 3/150 2024-06-18 09:13 by kzx_33
[考博] 34岁读博士晚吗 +32 emitdne 2024-06-13 32/1600 2024-06-18 08:44 by yuan0806
[论文投稿] ACS Nano投稿后分配到副编辑手里12天了,能确定送审了吗? +6 潇洒怡惜 2024-06-12 11/550 2024-06-18 01:48 by 玩耍绝缘体
[基金申请] 化学会年会改成一年开一次了? +7 babu2015 2024-06-12 15/750 2024-06-17 20:28 by 落笔画枫
[论文投稿] 论文已接收,但发现修改稿传的是旧版该怎么办? +3 zsq54321 2024-06-15 6/300 2024-06-17 19:45 by wjykycg
[基金申请] 面青地会评时间 +8 tanjydd 2024-06-15 8/400 2024-06-17 17:08 by 小龙虾2008
[基金申请] 博后基金,博管会会提前知道消息吗? +4 yuyiang 2024-06-13 4/200 2024-06-16 11:40 by yangyuzhong4
[基金申请] 博士后创新人才支持计划公示 +9 aishida144 2024-06-14 15/750 2024-06-16 09:52 by msjy
[论文投稿] 投稿被一个审稿人恶意评审了怎么样? +5 1chen 2024-06-14 7/350 2024-06-15 23:15 by xy66xy
[基金申请] 关于博后基金的bug问题 +6 lxr1991 2024-06-14 9/450 2024-06-15 21:17 by since—2010
[基金申请] 博士后基金需要结题吗? +8 zhouchuck 2024-06-13 8/400 2024-06-14 17:27 by liuyupu132
[考博] 申博找导师 +4 疏影横斜水清浅3 2024-06-13 6/300 2024-06-14 14:31 by zxl_1105
[有机交流] ππ堆积会发生在有机溶剂中吗 5+3 zibuyu0420 2024-06-13 4/200 2024-06-14 14:17 by 小肉干
[基金申请] 国自然基金公布的时候基金号有吗 +8 潇洒怡惜 2024-06-13 11/550 2024-06-14 11:24 by JRfei
[基金申请] 75批博后基金 +10 kyukitu 2024-06-13 13/650 2024-06-14 10:31 by kyukitu
[论文投稿] 投稿后发现其他作者的邮箱填错了该怎么办呀 10+4 在飞的猪 2024-06-13 6/300 2024-06-14 04:45 by 小虫子咔咔
[基金申请] 博士后面上项目状态还是专家评审吗 10+9 Thatcheremu 2024-06-13 55/2750 2024-06-13 21:23 by 乌合麒麟
[硕博家园] 机械研究生如何拿到年薪40+w +13 阿巴阿巴哦哦 2024-06-11 15/750 2024-06-13 15:40 by 113745685
信息提示
请填处理意见