-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestFastReturn.java
More file actions
125 lines (102 loc) · 4.47 KB
/
Copy pathTestFastReturn.java
File metadata and controls
125 lines (102 loc) · 4.47 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/**
* Basic functionality validation for fastreturn keyword
* Tests fundamental fastreturn behavior compared to regular return
*/
public class TestFastReturn {
// Test 1: Basic linear recursion
public static int linearRecursionReturn(int n) {
if (n <= 0) {
return 0;
}
return n + linearRecursionReturn(n - 1);
}
public static int linearRecursionFastReturn(int n) {
if (n <= 0) {
fastreturn 0;
}
fastreturn n + linearRecursionFastReturn(n - 1);
}
// Test 2: Factorial computation
public static long factorialReturn(int n) {
if (n <= 1) {
return 1;
}
return n * factorialReturn(n - 1);
}
public static long factorialFastReturn(int n) {
if (n <= 1) {
fastreturn 1;
}
fastreturn n * factorialFastReturn(n - 1);
}
// Test 3: Fibonacci sequence
public static int fibonacciReturn(int n) {
if (n <= 1) {
return n;
}
return fibonacciReturn(n - 1) + fibonacciReturn(n - 2);
}
public static int fibonacciFastReturn(int n) {
if (n <= 1) {
fastreturn n;
}
fastreturn fibonacciFastReturn(n - 1) + fibonacciFastReturn(n - 2);
}
// Test 4: Tail recursion simulation
public static int tailRecursionReturn(int n, int acc) {
if (n == 0) {
return acc;
}
return tailRecursionReturn(n - 1, acc + n);
}
public static int tailRecursionFastReturn(int n, int acc) {
if (n == 0) {
fastreturn acc;
}
fastreturn tailRecursionFastReturn(n - 1, acc + n);
}
public static void main(String[] args) {
int[] testSizes = {100, 500, 1000, 2000};
for (int size : testSizes) {
System.out.println("Size: " + size);
long startTime = System.nanoTime();
int result1 = linearRecursionReturn(size);
long returnTime = System.nanoTime() - startTime;
startTime = System.nanoTime();
int result2 = linearRecursionFastReturn(size);
long fastReturnTime = System.nanoTime() - startTime;
double improvement = ((double)(returnTime - fastReturnTime) / returnTime) * 100;
System.out.printf("Linear: return=%dns, fastreturn=%dns, diff=%.1f%%\n",
returnTime, fastReturnTime, improvement);
startTime = System.nanoTime();
long fact1 = factorialReturn(size / 10);
long factReturnTime = System.nanoTime() - startTime;
startTime = System.nanoTime();
long fact2 = factorialFastReturn(size / 10);
long factFastReturnTime = System.nanoTime() - startTime;
improvement = ((double)(factReturnTime - factFastReturnTime) / factReturnTime) * 100;
System.out.printf("Factorial: return=%dns, fastreturn=%dns, diff=%.1f%%\n",
factReturnTime, factFastReturnTime, improvement);
startTime = System.nanoTime();
int tail1 = tailRecursionReturn(size, 0);
long tailReturnTime = System.nanoTime() - startTime;
startTime = System.nanoTime();
int tail2 = tailRecursionFastReturn(size, 0);
long tailFastReturnTime = System.nanoTime() - startTime;
improvement = ((double)(tailReturnTime - tailFastReturnTime) / tailReturnTime) * 100;
System.out.printf("Tail: return=%dns, fastreturn=%dns, diff=%.1f%%\n",
tailReturnTime, tailFastReturnTime, improvement);
System.out.println();
}
System.out.println("Fibonacci size: 25");
long startTime = System.nanoTime();
int fib1 = fibonacciReturn(25);
long fibReturnTime = System.nanoTime() - startTime;
startTime = System.nanoTime();
int fib2 = fibonacciFastReturn(25);
long fibFastReturnTime = System.nanoTime() - startTime;
double improvement = ((double)(fibReturnTime - fibFastReturnTime) / fibReturnTime) * 100;
System.out.printf("Fibonacci: return=%dns, fastreturn=%dns, diff=%.1f%%\n",
fibReturnTime, fibFastReturnTime, improvement);
}
}