40 lines
1.1 KiB
Plaintext
40 lines
1.1 KiB
Plaintext
NORMAL MODE IS INTEGER
|
|
|
|
R WE HAVE TO DEFINE OUR OWN STACK FIRST
|
|
DIMENSION STACK(1000)
|
|
SET LIST TO STACK
|
|
|
|
R SUDAN FUNCTION
|
|
INTERNAL FUNCTION(N,X,Y)
|
|
ENTRY TO SUDAN.
|
|
|
|
R BASE CASES
|
|
WHENEVER N.E.0, FUNCTION RETURN X+Y
|
|
WHENEVER Y.E.0, FUNCTION RETURN X
|
|
|
|
R RECURSIVE CASE - WITH MANUAL STACK MANIPULATION
|
|
R NOTE WE DON'T NEED X AFTER THE FIRST CALL
|
|
SAVE RETURN
|
|
SAVE DATA N,Y
|
|
K = SUDAN.(N,X,Y-1)
|
|
RESTORE DATA N,Y
|
|
RESTORE RETURN
|
|
|
|
SAVE RETURN
|
|
K = SUDAN.(N-1, K, K+Y)
|
|
RESTORE RETURN
|
|
FUNCTION RETURN K
|
|
END OF FUNCTION
|
|
|
|
INTERNAL FUNCTION(N,X,Y)
|
|
ENTRY TO SHOW.
|
|
VECTOR VALUES FMT = $7HSUDAN.(,I1,1H,,I1,1H,,I1,4H) = ,I8*$
|
|
PRINT FORMAT FMT,N,X,Y,SUDAN.(N,X,Y)
|
|
END OF FUNCTION
|
|
|
|
SHOW.(1,3,3)
|
|
SHOW.(2,1,1)
|
|
SHOW.(2,2,1)
|
|
SHOW.(3,1,1)
|
|
END OF PROGRAM
|