昔は再帰の例としてしょっちゅう見かけたもんですが。C-Curve です。
Fortranでは、なんとなく再帰は忌み嫌われていますが、たまにはいいよね。
PROGRAM c_curve USE plotter IMPLICIT NONE INTEGER :: norder WRITE(*, *) 'input order' READ(*, *) norder CALL gr_on('C-curve', 640, 480) CALL gr_axis(0.0, 4.0, 0.0, 3.0) ! xmin, xmax, ymin, ymax CALL gr_show() CALL sleep(50) CALL move(1.0, 2.0) CALL c(norder, 2.0, 0.0) CALL gr_off() STOP CONTAINS !--------------------------------- RECURSIVE SUBROUTINE c(i, dx, dy) IMPLICIT NONE INTEGER, INTENT(IN) :: i REAL, INTENT(IN) :: dx, dy IF (i == 0) THEN CALL draw_rel(dx, dy) ELSE CALL c(i - 1, (dx + dy) / 2.0, (dy - dx) / 2.0 ) CALL c(i - 1, (dx - dy) / 2.0, (dy + dx) / 2.0 ) END IF RETURN END SUBROUTINE c !--------------------------------- END PROGRAM c_curve
うほっプロットは、IEを開いているときに READ * 入力があると、なんかおかしい挙動をする。原因がよく分からない。