Как использовать рекурсивную функцию вместо вложенных циклов? - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужен код такой, чтобы я получал два ввода от пользователя, одну переменную n, а вторую переменную t, где 1 <= n <= 4. Я хочу сделать n вложенных циклов, в которых каждый l oop работает в течение t раз. Я сделал код для этого в Java: </p>

int n=in.nextInt();
int t=in.nextInt();
for(int l1=1;l1<=n;l1++)
{
    if(n==1)
    {
        //do something here
    }
    else
    {
        for(int l2=11;l2<=m;l2++)
        {
            if(n==2)
            {
                //do something here
            }
            else
            {
                for(int l3=1;l3<=t;l3++)
                {
                    if(n==3)
                    {
                        //do something here
                    }
                    else
                    {
                        for(int l4=1;l4<=t;l4++)
                        {
                            //do something here
                        }
                    }   
                }
            }
        }
    }
}

Но здесь, если я хочу n в диапазоне 1 <= n <= 10, тогда у меня есть гнездо l oop 10 раз, что не очень хорошая идея. Какой лучше подход для этого. Здесь «сделать что-то здесь» одинаково в каждом случае. Заранее спасибо. </p>

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Что-то подобное должно делать:

interface Op { public void apply(); }

void f(int start, int end, int crucialStep, Op doSomething) {
    for (int i = start; i <= end; i++) {
        if (i == crucialStep) { doSomething.apply(); }
        else { f(1, 10, crucialStep + 1, doSomething); }
    }
}
0 голосов
/ 23 апреля 2020

Мы можем сделать рекурсивную функцию, как я сделал. В моей рекурсивной функции я перешел к аргументам, первый - int n, а второй - int t. n показывает, сколько вложенных циклов мы хотим и для какой итерации и t представляет, на какой итерации выполняется функция.

    public static void recursive(int n,int t)
    {
        for(int i=1;i<=n;i++)
        {
            if(n==t)
                //do something here
            else
                recursive(n,t+1);
        }
    }

Это прекрасно сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...