Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как в коде заменить рекурсию на Java?


Автор: n199a 23.8.2020, 11:16
[/code=java]

Имеется такой код:
Код
package com.company;

import java.util.*;

public class Main {

    static int TOTAL_POINTS = 4, POINTS_ON_LINE = 3;

    static int[] temp = new int[POINTS_ON_LINE];

    public static void main(String[] args) {
        int[] points = new int[]{1,2,3,4};

        System.out.println("Без повторений:");
        p1(0,0, points);
    }

    static void p1(int nowPosition, int sizeArray, int[] points) {
        if (nowPosition == POINTS_ON_LINE) {
            System.out.println("Выводим:");
            System.out.println(Arrays.toString(temp));
        } else {
            for(int i = sizeArray + 1; i <= TOTAL_POINTS; i++) {
                temp[nowPosition] = points[i-1];
                p1(nowPosition + 1, i, points);
            }
        }
    }
}


На выходе получаем:
Код
Без повторений:
Выводим:
[1, 2, 3]
Выводим:
[1, 2, 4]
Выводим:
[1, 3, 4]
Выводим:
[2, 3, 4]


Программа работает как и задумывалось.
Но необходимо избавиться от рекурсивного вызова метода p1.
Пробовал переписать вот так, но не выходит. 

Код
import java.util.*;

public class Main {

    static int TOTAL_POINTS = 4, POINTS_ON_LINE = 3;

    static int[] temp = new int[POINTS_ON_LINE];

    public static void main(String[] args) {
        int[] points = new int[]{1,2,3,4};

        System.out.println("Без повторений:");
        p1(0,0, points);
    }

    static void p1(int[] points) {
        int sizeArray = points.length;

        for(int i = sizeArray + 1; i < TOTAL_POINTS; i++, sizeArray = i) {
            int nowPosition = 0;

            if(nowPosition == POINTS_ON_LINE) {
                System.out.println("Выводим: " + Arrays.toString(temp));
            } else {
                temp[nowPosition] = points[i-1];
                nowPosition++;
            }
        }
    }
}


Что где не так?

Автор: LSD 25.8.2020, 21:02
А можно пояснение, что алгоритм делает?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)