Распечатать все перестановки используя рекурсию - VB
Формулировка задачи:
Есть проблема. Даны числа 1, 2, ... n
Надо написать рекурсивную процедуру, которая распечатает
все перестановки из этих чисел.
Мне известна обычная (нерекурсивная) процедура
В интернете нашел и иную экзотическую процедуру
на Паскале. А рекурсивной не нашел. Стал делать сам.
Для простоты возьмем 3 числа (1,2,3)
(Числа задаются массивом A ())
Общая схема рекурсивно процедуры:
0. Вызов рекурсивной процедуры Call Recursia (A(), n) (n=3 - размер массива)
1. Печатаем число 1
2. Образуем массив A(1)=2, A(2)=3
3. Call Recursia (A(), n-1)
4. Печатаем число 2
5. Образуем массив A(1)=1, A(2)=3
6. Call Recursia (A(), n-1)
7. Печатаем число 3
8. Образуем массив A(1)=1, A(2)=2
9. Call Recursia (A(), n-1)
Все это можно записать короче. Но программа не работает.
Что она печатает.
1. Есть повторяющиеся элементы
2. Есть строки где на один элемент меньше
3. Есть дублирующиеся строки
Мое мнение об ошибках.
Основная стратегическая линия построения рекурсии верна
Но.
Самый уязвимый элемент, мне так кажется, это МАССИВ.
Ведь он меняется и его надо восстанавливать. Однако
Запасной (неизменяемый) массив результатов не дал.
Вывод:
Две недели решения этой задачи ничего не дали.
Решил обратиться на форум. Если никто не решит, то
все брошу и решу сам.
Решение задачи: «Распечатать все перестановки используя рекурсию»
textual
Листинг программы
Dim x() As Integer Dim n As Integer Public Function Swap(ByRef x As Integer, ByRef y As Integer) Dim temp As Integer temp = x x = y y = temp End Function Sub Generate(k As Integer) Dim i As Integer, j As Integer If k = n Then For i = 1 To n S$ = S$ & x(i) ' Собираем строку Next Form1.Print S$ ' вывод на окно S$ = "" Else For j = k + 1 To n Swap x(k + 1), x(j) Generate k + 1 Swap x(k + 1), x(j) Next End If End Sub Private Sub Form_Activate() Dim i As Integer n = 3 ReDim x(1 To n) For i = 1 To n x(i) = i Next Generate 0 End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д