Рейтинг:
0
Avi Farah
Если я проигнорирую начало "если(---
вернуться, завершить"
и я игнорирую лишнюю закрывающую скобку "}"
Тогда мне кажется, что ваша программа завершается
Так например я попробовал:
подмножество (new string[] { "Abc", "Def"}, 0, 0, 0, new bool[2], 0);
и это прекратилось.
Однако вы говорили о m + d, которого я не понял,хотя вы дважды рекурсивно вызываете подмножество...
Пожалуйста, будьте более конкретны в своем вопросе.
Thaksha
Просто я хочу остановить выполнение всего рекурсивного вызова в одном конкретном условии (оператор if), что означает, что моя программа не будет вызывать метод снова после этого условия и показывать результат до этого состояния.
Avi Farah
Ваш вопрос слишком расплывчат.
В общем чтобы написать рекурсивную программу вам нужно:
1. Рекурсивное определение и
2. Завершающий состоянии.
Ваше завершающее условие проверяется перед вашим рекурсивным вызовом, и рекурсивный вызов должен приблизить вас к завершающему условию, оценивающему true, иначе вы окажетесь в бесконечной рекурсии.
Надеюсь, это поможет,
Ави
Thaksha
Спасибо за ваш ответ....Я уже знаю, что рекурсивный вызов должен иметь завершающее условие для завершения метода. Но у меня есть проблема, когда я ставлю условие завершения, а затем вызываю его снова, потому что рекурсивная функция имеет дело со стековой памятью.
Поэтому мне нужны комбинации без рекурсии в c#.
Когда я ставлю входные данные как A, B,C,D
выход должен быть похож на A B C D
A B C
A B D
С Д
B C D
А Б
С
Д
Б
B D
C D
Один
Б
С
Д
Так что у вас есть или вы знаете какие-либо коды для этого.
Avi Farah
Опять же, ваш вопрос слишком расплывчат,чтобы я мог комментировать детали. Мы все еще имеем дело с тем же алгоритмом? Как буквы A, B, C, D применяются к алгоритму.
Я чувствую, что вам нужно следовать своей логике, которую вы не опубликовали.
То, что приходит на ум о вашем двойном рекурсивном вызове, - это ряд Фибоначчи:
Фибоначчи[0] = f0 (константа, скажем, 0)
Фибоначчи[1] = f1 (другая константа, скажем, 1)
Фибоначчи[n] = Фибоначчи[n-2] + Фибоначчи[n-1]
Это двойной рекурсивный вызов (кстати, очень дорогое вычислительное время)
Однако мы можем упростить/удешевить его: рассмотрим кортеж из 2 чисел, обозначаемый (x, y), тогда:
fib[0] = (f0, f1)
мерцательная аритмия[Н] = следующий(мерцательная аритмия[Н-1])
куда дальше( (х,г) ) = (г, х + г)
и Фибоначчи [n] = fib[n].Первый
Теперь нам удалось уменьшить рекурсивный вызов 2 до 1.
Надеюсь, это поможет.
Ави