ex0830.for

来自「Fortran95的一些有用的源程序」· FOR 代码 · 共 53 行

FOR
53
字号
	PROGRAM  ex0830
	IMPLICIT NONE
	INTEGER  N
	INTEGER  fact

	WRITE(*,*) 'N='
	READ (*,*) n
	WRITE(*, "(I2,'! = ',I8)" ) n, fact(n)
	
	STOP
	END

	INTEGER FUNCTION ifact(n)
	IMPLICIT NONE
	INTEGER fact
	INTEGER n
	
	ifact = fact(n)
	
	RETURN
	END

	INTEGER FUNCTION fact(n)
	IMPLICIT NONE
	INTEGER  n
	INTEGER  count
	INTEGER  localcount, temp  ! 局部变量
	INTEGER  ifact
	EXTERNAL ifact
	SAVE     count
	data     count  /1/

	localcount = count
	count = count+1
	WRITE(6, 100) localcount, n
100   FORMAT(I2,'th enter, n=',I2)
	IF ( n < 0 ) THEN ! 不合理的输入
	  fact = -1       ! 随便设定一个值
	  WRITE(6, 200) localcount, n, fact
	  RETURN          ! n不合理, 直接return 
	ELSE IF ( n <= 1 ) THEN
        fact = 1          
        WRITE(6, 200) localcount, n, fact
        RETURN          ! 不用再向下递归了, return 
      END IF
      ! 会执行到这, 代表n>1, 从n*(n-1)!来计算n!
      temp = n-1
      fact = n * ifact(temp) ! 调用ifact, ifact会直接再调用fact
      WRITE(6, 200) localcount, n, fact
200   FORMAT(I2,'th exit, n=',I2, ' ans=',I8)
      RETURN
	END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?