I love the way I can handle lists in Python. This solution to any recursion looks easy and clean. For example, a typical problem of getting all permutations of elements in a list in Python looks like this:
def permutation_recursion(numbers,sol): if not numbers: print "this is a permutation", sol for i in range(len(numbers)): permutation_recursion(numbers[:i] + numbers[i+1:], sol + [numbers[i]]) def get_permutations(numbers): permutation_recursion(numbers,list()) if __name__ == "__main__": get_permutations([1,2,3])
I like the way I can just get new instances of modified lists by doing things like numbers[:i] + numbers[i+1:] or sol + [numbers[i]]
If I try to specify the exact same thing in Java, it looks like this:
import java.util.ArrayList; import java.util.Arrays; class rec { static void permutation_recursion(ArrayList<Integer> numbers, ArrayList<Integer> sol) { if (numbers.size() == 0) System.out.println("permutation="+Arrays.toString(sol.toArray())); for(int i=0;i<numbers.size();i++) { int n = numbers.get(i); ArrayList<Integer> remaining = new ArrayList<Integer>(numbers); remaining.remove(i); ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol); sol_rec.add(n); permutation_recursion(remaining,sol_rec); } } static void get_permutation(ArrayList<Integer> numbers) { permutation_recursion(numbers,new ArrayList<Integer>()); } public static void main(String args[]) { Integer[] numbers = {1,2,3}; get_permutation(new ArrayList<Integer>(Arrays.asList(numbers))); } }
To create the same recursion, I need to do:
ArrayList<Integer> remaining = new ArrayList<Integer>(numbers); remaining.remove(i); ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol); sol_rec.add(n);
This is pretty ugly, and for more complex solutions it gets worse. Like in this example
So my question is: are there any buil-in statements or helper functions in the Java API that will make this solution more Pythonic?
Manuel salvadores
source share