public class TestRecursion {
   
   public static void writeStringBackwards(String s) {
      for (int i = s.length()-1; i >= 0; i--) {
         System.out.print(s.charAt(i));
      }
      System.out.println();
   }
   
   public static String writeStringBR(String s) {
      if (s.length() == 1) {
         return s;
      }
      else {
         return s.substring(s.length() - 1,s.length()) +
            writeStringBR(s.substring(0,s.length()-1)) ;
      }
   }
   
   /* 
    * Precondition: string s contains size characters
    *               size >= 0
    * Postcondition: s remains unchanged.
    */
   public static void writeBackward(String s) {
      if (s.length() > 0) {
         // write the rest of the string backward
         writeBackward(s.substring(1));
         // write the first character
         System.out.print(s.charAt(0));
      }
      System.out.println();
   }
   
   /* 
    * Precondition: string s contains size characters
    *               size >= 0
    * Postcondition: s remains unchanged.
    */
   public static void writeBackward1(String s) {
      if (s.length() == 0) {
         System.out.println();
      }
      else{
         // write the last character
         System.out.print(s.substring(s.length()-1));
         // write the rest of the string backward
         writeBackward1(s.substring(0,s.length()-1));
      }
   }
   
   public static String recRevString(String str) {
      if (str.length() == 0) {
         return "";
      } else {
         return recRevString(str.substring(1)) + 
            str.charAt(0);
      }
   }
   
   public static int rabbit(int n) {
      if (n <= 2) {
         return 1;
      }
      else {
         return rabbit(n-1) + rabbit(n-2);
      }
   }
   
}

