2013-03-18 56 views
0

這是定期如何完成的,但它必須是遞歸的,沒有for,do-while和while循環。如果只是陳述。你可以編寫它如何編寫一個遞歸方法,該方法將整數ArrayList作爲輸入並返回最小整數?

import java.util.ArrayList; 
import java.util.Scanner; 

public class arrayex1 { 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 
     ArrayList<Integer> numbers = new ArrayList<Integer>(); 

     System.out.println("Enter numbers: "); 

     for (int i = 0; i < 10; i++) { 
      int num = input.nextInt(); 
      numbers.add(num); 
     } 

     for (int i = 0; i < numbers.size(); i++) { 
      if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i. 
       System.out.println(numbers.get(i) + " <== Smallest number"); 
      } else { 
       System.out.println(numbers.get(i)); 
      } 
     } 
    } 

    public static int findMin(ArrayList<Integer> n) { 

     int min = 0; // Get value at index position 0 as the current smallest. 

     for (int i = 0; i < n.size(); i++) { 
      if (n.get(i) < min) { 
       min = i; 
      } 
     } 

     return min; 
    } 
} 
+0

當前的代碼有什麼問題?你問如何刪除現有的循環?如果是這樣,你應該自己嘗試一下,當你遇到一個特定的錯誤時問一個問題。 – 2013-03-18 03:13:40

+0

沒有for循環,do-while循環,沒有while循環,只有當這些語句是我的教授設置的參數時,我真的很難迴歸到我沒有真正理解的地步。我最初發布的代碼是所有循環,但我不知道如何遞歸地接近它。 – 2013-03-18 03:34:43

回答

1

在這裏你去...

public static void main(String[] args) throws Exception { 

    final List<Integer> numbers = new ArrayList<Integer>() { 
     { 
      add(3); 
      add(4); 
      add(6); 
      add(1); 
      add(9); 
     } 

    }; 

    final int min = findSmallest(numbers.iterator(), Integer.MAX_VALUE); 
    System.out.println("Smallest: " + min); 
} 

private static int findSmallest(Iterator<Integer> iterator, Integer max) { 

    int min = Math.min(iterator.next(), max); 
    if (iterator.hasNext()) { 
     min = findSmallest(iterator, min); 
    } 

    return min; 
} 
+1

歐普說它需要一個'ArrayList ',但不知道這個需求有多難...... – tjameson 2013-03-18 03:03:04

+0

這就是它......謝謝大家! – 2013-03-18 03:14:03

2

方式一:

findMin應該返回INT,採取ArrayList<Integer>的整數,INT分鐘,INT指數與被調用(整數,是Integer.MAX_VALUE,0)。

findMin應該檢查整數[index]的值是否小於min - 如果是,它會更新最小值。

然後,如果它不在整數的最後一個索引處,它會返回調用自身的值(整數,最小值,++索引)。

如果是,它會返回最小值。

+0

是這個遞歸嗎?問題的參數是必須遞歸地完成... – 2013-03-18 02:57:30

+0

@SuzyMWoodruff - 是的。 – tjameson 2013-03-18 03:00:58

+0

@Suzy M Woodruff是的!想一想 - 該方法的流程控制是自我調用。 – Patashu 2013-03-18 03:01:06

0

你可以做這樣的事情。

int min = 2876529394; // Holds the smallest element. Put a number that you know won't 
         // be in the ArrayList just to make the code simpler. If you don't 
         // have such a number, just implement a counter variable. 

findMin(numbers, 0); 
public void findMin(ArrayList<Integer> a, int index) { 

    if(index < a.size()) { 

     if(a.get(index) < min) 
      min = a.get(index); 

     findMin(a, ++index); 

    } 
}    

在這裏,你基本上做同樣的事情for循環原則上會怎麼做,而是你使用遞歸。

+0

全球?真?? – tjameson 2013-03-18 03:08:08

相關問題