Как превратить итеративный код в рекурсивный код?

#java #recursion

Вопрос:

Я полный новичок в кодировании. Я пытаюсь изменить итерационный метод на рекурсивный. Я попытался изменить приведенный ниже метод totalNoRecursion на рекурсивный метод, но мои результаты не одинаковы для обоих методов. Цель метода состоит в том, чтобы найти первый индекс массива данных, в котором достигнута цель. Так, например, если цель равна 10, то индекс будет равен 3, так как 2 2 3 4 = 11. Или, если целевой показатель равен 5, возвращаемый индекс будет равен 2, так как 2 2 3 = 7. Если массив пуст или цель никогда не достигается после суммирования каждого элемента в массиве, он возвращает -1. Как я могу изменить свой метод totalRecursion, чтобы он работал правильно? Спасибо

 public class totalRecursive{


   private static int data[] = {2, 2, 3, 4, 6, 4};

 
 
   public static void main (String[]args){
      
   
   
      System.out.println(totalNoRecursion(10));
      System.out.println(totalNoRecursion(4));
      System.out.println(totalNoRecursion(1));
      System.out.println(totalNoRecursion(100));
      System.out.println(totalNoRecursion(3));
      
      
      System.out.println("*********");
      
      System.out.println(totalRecursion(data, 10,0,0));
      System.out.println(totalRecursion(data, 4,0,0));
      System.out.println(totalRecursion(data, 1,0,0));
      System.out.println(totalRecursion(data, 100,0,0));
      System.out.println(totalRecursion(data, 3,0,0));
        
   }


   public static int totalNoRecursion(int target){
      int total = 0;
      for(int i = 0; i < data.length; i  ){
         total  = data[i];
         if(target <= total)
            return i;
      
      }
      
      return -1;
      
      
   }
   
     
 
   public static int totalRecursion(int [] data, int target, int total, int index) {
   
   
      if(index == data.length)
         return -1;
      if(total > target)
         return index -1;
         
      return totalRecursion(data, target, total   data[index], index   1);
     
      
   
   }
   
}
 

Вывод:

 3
1
0
-1
1
*********
3
2
0
-1
1
 

Ответ №1:

Просто используйте то же условие и в рекурсивном

  public static int totalRecursion(int [] data, int target, int total, int index) {
   
   
      if(index == data.length)
         return -1;
      if(target <= total)
         return index-1;
         
      return totalRecursion(data, target, total   data[index], index   1);
     
      
   
   }