option nolet print "**********************************************" print "* recursion: Ackermann function,version 1.0 *" print "* peter.vlasschaert@gmail.com,13/02/2020 *" print "**********************************************" !https://rosettacode.org/wiki/Ackermann_function print print "********************************************" print "* ack(m,n) => algo *" print "* n+1 if m=0 *" print "* ack(m-1,1) if m>0 and n=0 *" print "* ack(m-1,ack(m,n-1)) if m>0 and n>0 *" print "********************************************" print DECLARE FUNCTION ack print " example : " print " ack(4,0)= ";ack(4,0) print dim ackm(0:3,0:7) mat ackm = 0 print " input matrix : ackm(0:3,0:7) " mat print ackm for i = 0 to 3 for j = 0 to 7 ackm(i,j) = ack(i,j) next j next i print " output matrix : " mat print ackm print print "**************************************" print "problem : ack(4,1) => out of memory " print "**************************************" print "ack(0,k) =k+1 " print "ack(1,k) =k+2 " print "ack(3,k) =2^(k+3)-3 " print "ack(4,k) =2^(ack(4,k-1)+3) -3 if k>0 " print "ack(4,0) =13 ,see output : matrix " print "**************************************" end function ack(m,n) if m=0 then ack = n+1 else if (n=0) then ack=10*(ack(m-1,1))/10! notation correction else ack = ack(m - 1, ack(m, n - 1)) end if end function