Iterativ zu Rekursiv umwandlung.

numb

Grünschnabel
Hallo!,
ich muss diese Methode zur rekursiven Methode umwandeln.
Code:
	public static String ba(int n) {
		String s = "";
		int p;
		for (p=2; p*p <= n; p++) {
			if (n%p == 0) {
				s = p + "*" + ba(n/p);
				break; // verlassen der for - Schleife
			}
		}
		if (p*p> n)
			s = s + n;
		return s;
	}

Ich habe so angefangen..
Code:
	public static String baR(int n, int p){
		String s = "";
		if (p*p<=n){
			if(n%p==0){
				s=p+"*"+baR(n/p,p+1);
				System.out.print(s);
			}
			if (p*p>n){
				s=s+n;
				System.out.print(s);
			}
			baR(n/p,p+1);
			System.out.print(s);
		}
		return s;
	}

Aber das gibt leider nicht die richtige Lösung aus. Hat jemand eine Idee, wie es sein sollte? :confused: :confused:
 
So sollte es aussehen.

Java:
package de.tutorials.forum.help.numb.recursion;

@SuppressWarnings("javadoc")
public class RecursionSample {
	public static void main(String[] args) {
		System.out.println(baIter(10));
		System.out.println(baRec(10));
	}

	private static String baRec(int n) {
		return baRec(n, 2);
	}

	private static String baRec(int n, int p) {
		if(p * p > n) return String.valueOf(n);

		if(n % p == 0) return p + "*" + baRec(n / p);

		return baRec(n, p + 1);
	}

	private static String baIter(int n) {
		String s = "";
		int p;
		for(p = 2; p * p <= n; p++) {
			if(n % p == 0) {
				s = p + "*" + baIter(n / p);
				break;
			}
		}
		if(p * p > n) s = s + n;

		return s;
	}
}

Output:
Code:
2*5
2*5
 

Neue Beiträge

Zurück