Add Tailrecursive Fibonacci

This commit is contained in:
Matti 2024-06-10 15:37:50 +02:00
parent 2a7ba7393c
commit c7aa18990e
3 changed files with 30 additions and 10 deletions

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_X" default="true" project-jdk-name="openjdk-22" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

View File

@ -21,12 +21,12 @@ public class aufg1 {
result = 0; result = 0;
} else if (number < 2) { } else if (number < 2) {
result = 1; result = 1;
}else if (number == 10) { // Optimization1 // }else if (number == 10) { // Optimization1
result = 89; // result = 89;
}else if (number == 20) { // Optimization2 // }else if (number == 20) { // Optimization2
result = 10946; // result = 10946;
}else if (number == 30) { // Optimization3 // }else if (number == 30) { // Optimization3
result = 1346269; // result = 1346269;
}else { }else {
result = fibonacciRec(number-1) + fibonacciRec(number-2); result = fibonacciRec(number-1) + fibonacciRec(number-2);
} }
@ -34,11 +34,30 @@ public class aufg1 {
return result; return result;
} }
public static int fiboTailRec(int number){
return helper(++number, new int[] {0,1});
}
private static int helper(int number, int[] result){
if (number < 0){
return 0;
}
if (number < 2){
return result[number];
}
int temp = result[0] + result[1];
result = new int[] {result[1], temp};
return helper(number-1, result);
}
public static void main(String[] agrs){ public static void main(String[] agrs){
// Fib(47) causes an Integer Overflow // Fib(47) causes an Integer Overflow
for (int i=0; i<46; i++) { for (int i=0; i<46; i++) {
System.out.println("i " + i + ": " + fibonacciIter(i)); System.out.println("i " + i + ": " + fibonacciIter(i));
System.out.println("i " + i + ": " + fibonacciRec(i)); System.out.println("i " + i + ": " + fibonacciRec(i));
System.out.println("i " + i + ": " + fiboTailRec(i));
System.out.println("=========="); System.out.println("==========");
} }
} }

View File

@ -4,9 +4,9 @@ public class Demo {
public static void main(String[] args) { public static void main(String[] args) {
Queenproblem Q = new Queenproblem(); Queenproblem Q = new Queenproblem();
Q.solve(); Q.solve();
// System.out.println("========\n"); System.out.println("====================================\n");
// Q.setField(new int[]{0,0,0,0,0,0,0,0}); Q.setField(new int[]{0,0,0,0,0,0,0,0});
// Q.solve(); Q.solve();
} }
} }