-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathcore_recursion.obs
More file actions
94 lines (80 loc) · 2.23 KB
/
core_recursion.obs
File metadata and controls
94 lines (80 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#~
# Core Recursion Test
# Tests recursive function calls and tail recursion
~#
class CoreRecursionTest {
function : Main(args : String[]) ~ Nil {
"Testing core recursion..."->PrintLine();
pass := true;
# Test simple recursion (factorial)
result := Factorial(5);
if(result <> 120) {
pass := false;
" FAIL: Factorial(5)"->PrintLine();
};
# Test recursion with base case
result := Factorial(0);
if(result <> 1) {
pass := false;
" FAIL: Factorial(0)"->PrintLine();
};
# Test Fibonacci
result := Fibonacci(10);
if(result <> 55) {
pass := false;
" FAIL: Fibonacci(10)"->PrintLine();
};
# Test recursion with accumulator
result := SumRange(1, 10);
if(result <> 55) {
pass := false;
" FAIL: SumRange(1, 10)"->PrintLine();
};
# Test mutual recursion
even_result := IsEven(6);
if(even_result = false) {
pass := false;
" FAIL: IsEven(6)"->PrintLine();
};
odd_result := IsOdd(7);
if(odd_result = false) {
pass := false;
" FAIL: IsOdd(7)"->PrintLine();
};
if(pass) {
"PASS: Core recursion"->PrintLine();
} else {
"FAIL: Core recursion"->PrintLine();
};
}
function : Factorial(n : Int) ~ Int {
if(n <= 1) {
return 1;
};
return n * Factorial(n - 1);
}
function : Fibonacci(n : Int) ~ Int {
if(n <= 1) {
return n;
};
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
function : SumRange(start : Int, end : Int) ~ Int {
if(start > end) {
return 0;
};
return start + SumRange(start + 1, end);
}
function : IsEven(n : Int) ~ Bool {
if(n = 0) {
return true;
};
return IsOdd(n - 1);
}
function : IsOdd(n : Int) ~ Bool {
if(n = 0) {
return false;
};
return IsEven(n - 1);
}
}