diff --git a/recursion/Fib.Mod b/recursion/Fib.Mod new file mode 100644 index 0000000..e5f5a27 --- /dev/null +++ b/recursion/Fib.Mod @@ -0,0 +1,33 @@ +MODULE fibonacci; + + +IMPORT Out, Modules; + + +VAR + n : LONGINT; + Arg0 : LONGINT; + + +PROCEDURE getFib (n : LONGINT) : LONGINT; + VAR result : LONGINT; +BEGIN + IF n = 0 THEN + result := 0 + ELSIF n = 1 THEN + result:= 1 + ELSE + result := getFib(n-1) + getFib(n-2) + END; + RETURN result +END getFib; + + +BEGIN + IF Modules.ArgCount # 2 THEN + Out.String("one argument needed"); Out.Ln; + HALT(1); + END; + Modules.GetIntArg(1, Arg0); + Out.Int(getFib(Arg0), 0); Out.Ln; +END fibonacci. diff --git a/recursion/Gcd.Mod b/recursion/Gcd.Mod new file mode 100644 index 0000000..2cc283d --- /dev/null +++ b/recursion/Gcd.Mod @@ -0,0 +1,31 @@ +MODULE gcd; + + +IMPORT Out, Modules; + + +VAR + gcd : INTEGER; + arg0, arg1 : LONGINT; + + +PROCEDURE getGCD(a, b : INTEGER): INTEGER; +VAR ret : INTEGER; +BEGIN + IF a = 0 THEN ret := b; + ELSIF b = 0 THEN ret := a; + ELSIF b > a THEN ret := getGCD(b, a); + ELSE ret := getGCD(b, a MOD b) END; + RETURN ret; +END getGCD; + + +BEGIN + IF Modules.ArgCount # 3 THEN + Out.String("enter two integers to get GCD"); Out.Ln; + HALT(1) + END; + Modules.GetIntArg(1, arg0); Modules.GetIntArg(2, arg1); + gcd := getGCD(SHORT(arg0), SHORT(arg1)); + Out.Int(gcd, 0); Out.Ln; +END gcd.