2013-03-18 55 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

相关问题