- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用以下代码,当变量 a
和 a1
等于 2,我希望递归子程序创建 2 个长度为 4(maxdev=4)的嵌套 do 循环。
我试图通过变量 count
控制嵌套级别( count1
在子程序中)。但是,当子程序被自身调用时,count1
的值不会在第一次调用中保留。我希望外循环保留 count1
的值1 和第二个循环具有 count1
的值2、体现嵌套层次。
我不确定如何指定程序以实现这一目标。相反,当创建内循环的调用返回到外循环时,count1
的值在外循环中已更改并反射(reflect)它在内循环中增加的内容。
program fragarrays
implicit none
integer::gridres,maxdev,a,count
integer, allocatable:: x(:)
open(unit=1,file='D:/output11.txt',status='unknown')
gridres=2
maxdev=gridres*gridres
do a = 1,2
count=0
allocate(x(a))
call assigncell(a,maxdev,count,x)
deallocate(x)
end do
contains
recursive subroutine assigncell(a1,maxdev1,count1,x1)
integer:: a1,maxdev1,b
integer::count1
integer,dimension(a1):: x1
count1=count1+1
do b=1,maxdev1
x1(count1)=b
write (1,*)count1,x1(count1),b,a1
if(count1.lt.a1)then
call assigncell (a1,maxdev1,count1,x1)
end if
end do
end subroutine assigncell
end program fragarrays
最佳答案
制作 count1
一个局部变量而不是一个参数。它的变化是因为它隐含了一个 inout
参数和调用应该改变它。作为局部变量,它对于子程序的每次调用都是唯一的。例如:
module MyMod
contains
recursive subroutine assigncell(a1,maxdev1,count1_arg,x1)
integer, intent (in):: a1,maxdev1
integer, intent (in)::count1_arg
integer,dimension(a1):: x1
integer :: count1, b
count1 = count1_arg
write (*, *) "entering subr. with", a1, count1
count1=count1+1
write (*, *) "changed to: a1, count1=", a1, count1
do b=1,maxdev1
x1(count1)=b
write (1,*)count1,x1(count1),b,a1
if(count1.lt.a1)then
call assigncell (a1,maxdev1,count1,x1)
end if
end do
write (*, *) "still at: a1, count1:", a1, count1
end subroutine assigncell
end module MyMod
program fragarrays
use MyMod
implicit none
integer::gridres,maxdev,a,count
integer, allocatable:: x(:)
open(unit=1,file='output11.txt',status='replace')
gridres=2
maxdev=gridres*gridres
do a = 1,2
count=0
allocate(x(a))
write (*, *) "calling with", a, count
call assigncell(a,maxdev,count,x)
deallocate(x)
end do
end program fragarrays
count1
的另一种方法子程序局部参数:给该参数
VALUE
属性:
...
recursive subroutine assigncell(a1,maxdev1,count1,x1)
integer, intent (in):: a1,maxdev1
integer, VALUE ::count1
integer,dimension(a1):: x1
integer :: b
write (*, *) "entering subr. with", a1, count1
...
关于recursion - 如何防止在递归 Fortran 子例程中定义的变量在内部调用时更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16259228/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!