/media/sda-magnetic/david/Dokumente-15/fernuni-hagen/cs-i-ii/old-cs-2-03/java-src/wonder.java


public class wonder {
   
   public static int [] wonder (int seed) {
      int [] wondernums;
      int i;
      
      wondernums = new int[1024];
      wondernums[0] = seed;
      
      for (i = 0;  i < 1024;  i++) {
         if ((wondernums[i] % 2) == 0)
            wondernums[i+1] = wondernums[i]/2;
         else
            wondernums[i+1] = wondernums[i]*3+1;
         if (wondernums[i+1] == 1)
            break;
      }
      if ((i == 1024) && (wondernums[i-1] != 1)) {
         System.out.println("Out of space");
         for (i = 0;  i < 1024;  i++)
            wondernums[i] = -1;
      }
      for (i = i + 2; i < 1024;  i++)
        wondernums[i] = -1;
      return wondernums;  
   }
   public static void printwondernums (int seed) {
      int [] wondernums = new int[1024];
      int i;
      
      wondernums = wonder(seed);
      
      for (i = 0;  i < 1024;  i++) {
          if(wondernums[i] < 0) 
             break;
          System.out.print(wondernums[i] + " ");
      }
      System.out.println(" ");
   
   }
   public static void main(String [] args) {
      int [] wondernums = new int[1024];
      int i;
      int j;
      int counti;
      int countj;
      
      wondernums = wonder(1);
      for (j = 1;  wondernums[j] >= 0;  j++);
      counti = 1;
      countj = j;
      
      for (i = 1;  i <= 100;  i++) {
         wondernums = wonder(i);
         for (j = 0; wondernums[j] >= 0;  j++);
         if (j > countj) {
            counti = i;
            countj = j;
         }
      }
      
      System.out.println ("Am meisten Schritte benoetigte die Zahl " + counti + " mit " + countj + " Schritten");
      wondernums = wonder(counti);
      printwondernums(counti);
      printwondernums(5);
      printwondernums(22);
      
      System.out.println (wonder_recursive(0, 22));
      System.out.println (Wunder_wie_in_der_Aufgabe_gefordert(22));
      
   
   }
   public static int wonder_recursive (int i, int num) {
      if (num == 1)
         return i;
      if ((num % 2) == 0)
         return wonder_recursive(i+1, num/2);
      else
         return wonder_recursive(i+1, num*3+1);
   }
   
   
   public static int Wunder_wie_in_der_Aufgabe_gefordert (int seed) {
       int n;
       
       n = 0;
       while(seed != 1) {
          if ((seed % 2) == 0)
             seed = seed / 2;
          else
             seed = seed * 3 + 1;
          n++;
       }
       return n;
   }
}