Как применить yield к рекурсивным функциям - PullRequest
0 голосов
/ 01 августа 2020

У меня есть следующая функция, которую я хотел бы изменить, чтобы возвращать перечислимое с помощью оператора yield. Я никогда раньше не использовал этот оператор и немного недоумеваю, почему я не могу заставить его работать. = состояния [я]; и я не могу понять почему.

    public static IEnumerable<int[]> printPermutations2(int[] n, int[] states, int idx)
    {
        if (idx == n.Length)
        { 
            yield return n;
        }
        for (int i = 0; i < states.Length; i++)
        {
            n[idx] = states[i];
            var perms = printPermutations2(n, states, idx + 1);
            foreach(var p in perms)
                yield return p;

        }
    }

1 Ответ

3 голосов
/ 01 августа 2020

yield return не выходит из метода - поэтому ваш текущий код всегда запускает for l oop.

Добавьте yield break, чтобы выйти из метода:

if (idx == n.Length)
{ 
    yield return n;
    yield break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...