@c+
module test17 -- fastfib with parameters (recursive and nested)
private
	proc fib(val integer n; ref integer result)

		proc help (val integer f,s,c,iv; ref integer r)
		begin
			if c >= iv -> r := +s;
			[] c < iv -> help(s, f + s, c + 1, iv, r);
			fi;
		end;

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

	integer i, result;

begin -- module 

	read i;  -- use 6
	fib(i, result);
	write 'fib(',i, ') = ', result;
end. -- 13
