$c+
module test17 { fastfib with parameters (recursive and nested)}
private
	tuple [procedure fib(value integer n; reference integer result)] fibber;
	
	procedure fibber@fib
		tuple [procedure help (value integer f,s,c,iv; reference integer r)] helper;
		
		procedure helper@help 
		begin
			if c >= iv -> r := +s;
			[] c < iv -> helper!help(s, f + s, c + 1, iv, r);
			fi;
		end;

	begin
		helper!help(1,1,1,n, result);
	end;

	integer i, result;

begin 

	read i;  {use 6}
	fibber!fib(i, result);
	write 'fib(',i, ') = ', result;
end. { 13}
