Распечатать все перестановки используя рекурсию - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы