Kombinacja bez powtórzeń - zamiana rekurencji w iterację

0

Cześć to mój pierwszy post, proszę o wyrozumiałość :)
Mam problem z przekształceniem rekurencyjnej kombinacji w iterację:
Wejście:

  • arr - tablica elemntów, len - ilość kombinacji, startPosition - początek nastepnej iteracji, result - wynik rekurencji
 
 static void combinations2(String[] arr, int len, int startPosition, String[] result) {

        if (len == 0) {
            for (String n : result) {
                System.out.print(n + "  \n");
            }

                 return;
        }

        for (int i = startPosition; i <= arr.length - len; i++) {
            result[result.length - len] = arr[i];
            combinations2(arr, len - 1, i + 1, result);
        }
        ile++;
    }

Próbuje tą rekurencję zamienić na model iteracyjny z odkładaniem zmiennych na stosie, lecz nie wiem co zrobić z instrukcją return; . Czy podejście jest poprawne?

static void combinations2(String[] arr, int len, int startPosition, String[] result) {

        Stack<Integer> start = new Stack<>();
        Stack<Integer> length = new Stack<>();
        
        start.push(startPosition);
        length.push(len);

        while (len > 0) {
            startPosition = start.pop();
            len = length.pop();
            
            if (len == 0) {
                for (String n : result) {
                    System.out.print(n + "  \n");                 
                }
               //return;
            } 

            for (int i = startPosition; i <= arr.length - len; i++) {
                result[result.length - len] = arr[i];
                //combinations2(arr, len - 1, i + 1, result);
                start.push(i + 1);
                length.push(len - 1);
                break;
            }
            ile++;
        }  
    }

Dzięki za każdą pomoc.

0

Po pierwsze na pewno ten break w nie ma sensu w pętli bo w takim razie wykona się tylko raz.

0

Kolego odnośnie javy to masz mega ilość odpowiedzi. wystarczy wpisać : java iteration example i np. http://www.oopweb.com/Java/Documents/ThinkCSJav/Volume/chap06.htm

0

Jakbym znalazł odpowiedz nie prosił bym o pomoc :) Czyli nikt nie podpowie jak rozłożyć tę rekurencję na ciąg iteracji?

0

Jakbyś napisał co funkcja combinations2 ma robić, to może by się komuś chciało zastanawiać.

0

Tak jak w drugim zdaniu. Dokładniej kombinacja bez powtórzeń k elementów ze zbioru n gdzie, k < n

1 użytkowników online, w tym zalogowanych: 0, gości: 1