mirror of
https://github.com/vishapoberon/oberonbyexample.git
synced 2026-04-05 21:02:25 +00:00
recursion example
This commit is contained in:
parent
d110fb0ac8
commit
9bcdd6db33
2 changed files with 64 additions and 0 deletions
33
recursion/Fib.Mod
Normal file
33
recursion/Fib.Mod
Normal file
|
|
@ -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.
|
||||||
31
recursion/Gcd.Mod
Normal file
31
recursion/Gcd.Mod
Normal file
|
|
@ -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.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue