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