Javakurs/Übungsaufgaben/Rekursion vs. Iteration/Musterlösung: Unterschied zwischen den Versionen
Jörg F (Diskussion | Beiträge) K (hat „Javakurs2007/Rekursion vs. Iteration/Musterlösung“ nach „Javakurs/Übungsaufgaben/Rekursion vs. Iteration/Musterlösung“ verschoben) |
K (fix alignment) |
||
Zeile 1: | Zeile 1: | ||
<pre> | <pre> | ||
− | public class | + | public class RecursionVsIteration { |
+ | public static void main(String args[]) { | ||
+ | int[] testValues = { 5, 10, 15, 20, 30, 40 }; | ||
+ | timeTest(testValues); | ||
+ | } | ||
− | + | /* calculates FibonacciNumbers */ | |
+ | public static int fibonacciRek(int n) { | ||
+ | int result; | ||
+ | if (n <= 1) { | ||
+ | if (n == 1) { | ||
+ | result = 1; | ||
+ | } else if (n == 0) { | ||
+ | result = 0; | ||
+ | } else { | ||
+ | System.out.println("Fibonacci numbers undefined for negative values."); | ||
+ | result = -1; | ||
+ | } | ||
+ | } else { | ||
+ | result = fibonacciRek(n - 1) + fibonacciRek(n - 2); | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
− | + | public static int fibonacciIte(int n) { | |
− | + | int result; | |
+ | if (n <= 1) { | ||
+ | if (n == 1) { | ||
+ | result = 1; | ||
+ | } else if (n == 0) { | ||
+ | result = 0; | ||
+ | } else { | ||
+ | System.out.println("Fibonacci numbers undefined for negative values."); | ||
+ | result = -1; | ||
+ | } | ||
+ | } else { | ||
+ | // n+1 because in the n-th entry is the n-th fibonacci number | ||
+ | int[] predecessors = new int[n + 1]; | ||
+ | predecessors[0] = 0; | ||
+ | predecessors[1] = 1; | ||
+ | for (int i = 2; i < predecessors.length; i++) { | ||
+ | predecessors[i] = predecessors[i - 1] + predecessors[i - 2]; | ||
+ | } | ||
+ | result = predecessors[n]; | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
− | + | public static void timeTest(int[] values) { | |
− | + | long before; | |
− | + | long after; | |
− | + | // recursion time test | |
− | + | before = System.currentTimeMillis(); | |
− | + | for (int i = 0; i < values.length; i++) { | |
− | + | // fibonacciRek(values[i]); | |
− | + | System.out.print("f(" + values[i] + ")= "); | |
− | + | System.out.println(fibonacciRek(values[i])); | |
− | + | } | |
− | + | after = System.currentTimeMillis(); | |
− | + | System.out.println("Rekursion benötigt: " + (after - before) + " ms"); | |
− | + | // iteration time test | |
− | + | before = System.currentTimeMillis(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | for (int i = 0; i < values.length; i++) { | ||
+ | // fibonacciIte(values[i]); | ||
+ | System.out.print("f(" + values[i] + ")= "); | ||
+ | System.out.println(fibonacciIte(values[i])); | ||
+ | } | ||
+ | after = System.currentTimeMillis(); | ||
+ | System.out.println("Iteration benötigt: " + (after - before) + " ms"); | ||
+ | } | ||
} | } | ||
</pre> | </pre> |
Aktuelle Version vom 4. März 2013, 13:41 Uhr
public class RecursionVsIteration { public static void main(String args[]) { int[] testValues = { 5, 10, 15, 20, 30, 40 }; timeTest(testValues); } /* calculates FibonacciNumbers */ public static int fibonacciRek(int n) { int result; if (n <= 1) { if (n == 1) { result = 1; } else if (n == 0) { result = 0; } else { System.out.println("Fibonacci numbers undefined for negative values."); result = -1; } } else { result = fibonacciRek(n - 1) + fibonacciRek(n - 2); } return result; } public static int fibonacciIte(int n) { int result; if (n <= 1) { if (n == 1) { result = 1; } else if (n == 0) { result = 0; } else { System.out.println("Fibonacci numbers undefined for negative values."); result = -1; } } else { // n+1 because in the n-th entry is the n-th fibonacci number int[] predecessors = new int[n + 1]; predecessors[0] = 0; predecessors[1] = 1; for (int i = 2; i < predecessors.length; i++) { predecessors[i] = predecessors[i - 1] + predecessors[i - 2]; } result = predecessors[n]; } return result; } public static void timeTest(int[] values) { long before; long after; // recursion time test before = System.currentTimeMillis(); for (int i = 0; i < values.length; i++) { // fibonacciRek(values[i]); System.out.print("f(" + values[i] + ")= "); System.out.println(fibonacciRek(values[i])); } after = System.currentTimeMillis(); System.out.println("Rekursion benötigt: " + (after - before) + " ms"); // iteration time test before = System.currentTimeMillis(); for (int i = 0; i < values.length; i++) { // fibonacciIte(values[i]); System.out.print("f(" + values[i] + ")= "); System.out.println(fibonacciIte(values[i])); } after = System.currentTimeMillis(); System.out.println("Iteration benötigt: " + (after - before) + " ms"); } }