Распечатать все перестановки используя рекурсию - 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
Листинг программы
  1. Dim x() As Integer
  2. Dim n As Integer
  3. Public Function Swap(ByRef x As Integer, ByRef y As Integer)
  4. Dim temp As Integer
  5. temp = x
  6. x = y
  7. y = temp
  8. End Function
  9. Sub Generate(k As Integer)
  10.     Dim i As Integer, j As Integer
  11.     If k = n Then
  12.           For i = 1 To n
  13.             S$ = S$ & x(i) ' Собираем строку
  14.          Next
  15.           Form1.Print S$ ' вывод на окно
  16.          S$ = ""
  17.     Else
  18.           For j = k + 1 To n
  19.               Swap x(k + 1), x(j)
  20.               Generate k + 1
  21.               Swap x(k + 1), x(j)
  22.           Next
  23.     End If
  24. End Sub
  25.  
  26. Private Sub Form_Activate()
  27. Dim i As Integer
  28. n = 3
  29. ReDim x(1 To n)
  30. For i = 1 To n
  31.         x(i) = i
  32.      Next
  33. Generate 0
  34. End Sub

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


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

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

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы