Reukursionselimination

Code:
private StringBuffer current=new StringBuffer();

private void bruteForce(int n)
	{
		if(n<0) return;
	
		for(int i=asciiStart;i<=asciiEnd;i++)
		{
		    current.setCharAt(current.length()-1-n,(char)i);
		   System.out.println(current);
		    bruteForce(n-1);
		}
	}

Ich möchte gern alle Zeichenkombinationen mit n stellen ausgeben und zwar ohne Rekursion.
Verschachtelte for-Schleifen würden gehen jedoch für 6 stellen müsste ich 6 verschachteln usw. Das ganze müsste dynamischer gehen.
 
Hallo,
eigentlich ist das ganz einfach.
Du zählst eine Variable in einer for-Schleife hoch, dann in der Schleife wandelst du die Zahl in ein Basis 26 Format um. Dies geht genaus, als wenn man Dezimalzahlen (Base 10) in Binär (Base 2) umwandelt (der Trick mit dem Teilen und dem Rest ;) ).
Dies lässt sich in einer 2. Schleife lösen.

Dann hast du z.B. diese neue Zahl
18 25 1 6 15 0 5 2 2

Für jede Zahl wähst du dann das entsprechende Zeichen aus dem Array raus, also 0 = A, 1 = B, 2 = C ....

Schon bekommst du so deine Zahlenkombinationen.



Edit.
#1: http://hackerboard.de/thread.php?threadid=22006&hilight=Basis
#2: Zahlenbasiswechsel
#3: Bruteforce mit charset unter C++
 
So sieht jetzt meine Lösung aus...

Code:
	StringBuffer sb=new StringBuffer("0123456789abcdef");
	

	public void count(int start,int up)
	{
		StringBuffer value=new StringBuffer();
		
		for(int i=start;i<=start+up;i++)
		{
			value.delete(0,value.length());
			int rest=i%sb.length();
			int div=i/sb.length();
			value.append(sb.charAt(rest));
			while(div>0)
			{
				rest=div%sb.length();
				div=div/sb.length();
				
				value.insert(0,sb.charAt(rest));
			}
			System.out.println(value);
		}
	}
 
Zurück
Oben