Решение задач с использованием рекурсии - QBasic
Формулировка задачи:
Когда я обратился к поисковой системе, то я не нашёл
ни одного упоминания о рекурсии. Испытав шок, я
решил создать эту тему на QBasic. (В паскале о рекурсии
говорят на каждом углу). Приведу нестандартный пример
рекурсии:
Посадил дед репку. И выросла она большая-пребольшая.
(Далее вызывается рекурсивная процедура)
Тянет дед репку, потянет, вытащить не может.
(Условием выхода из этой процедуры будет событие
при котором репка будет вытащена)
Эта процедура вызывает сама себя и на помощь деду
приходит бабка. И тд. После шестого вызова процедуры
на арене появляется мышка. Благодаря которой репку
вытаскивают. Условие окончания процедуры соблюдено
и программа (как и сказка) завершается.
Что надо знать при написании рекурсивных программ.
1. Оператор CLEAR, , 29000
Этот оператор задаёт величину стека. В данном примере
приведена цифра 29000 - это максимальная величина
стека для QBasic v1.0 -1.1. Для QuickBasic стек ещё больше.
2. Функция FRE(-2) ; (PRINT FRE(-2))
Эта функция указывает (в байтах) свободное стековое
пространство.
3. Функция DEF FN... - эта функция не поддерживает
рекурсии.
4. Рекурсию поддерживают
1) FUNCTION - END FUNCTION
2) SUB - END SUB
3) GOSUB - RETURN
Последним правда не слишком удобно пользоваться, но
пару примеров я приведу (именно на GOSUB - RETURN)
Эта программа вычисляет сумму n натуральных чисел
Листинг программы
- CLS
- CLEAR, , 20000
- INPUT "N = "; N
- GOSUB RECURSIA
- PRINT Sum
- END
- RECURSIA:
- IF n > 0 THEN
- Sum = Sum +n
- n = n - 1
- GOSUB RECURSIA
- END IF
- RETURN
Это программа вычисляет числа Фибоначи
Листинг программы
- DECLARE FUNCTION SSTR(n!)
- CLS
- DEFLNG F
- CLEAR, , 10000
- INPUT "N = "; n
- m = n
- f1 = 1: f2 = 1: fi = 1
- GOSUB RECURSIA
- PRINT " fi(" + SSTR(m) + ") ="; fi
- END
- RECURSIA:
- IF n = 1 OR n = 2 THEN
- RETURN
- ELSE
- fi = f1 + f2
- f1 = f2
- f2 = fi
- n = n - 1
- GOSUB RECURSIA
- END IF
- RETURN
- FUNCTION SSTR(n)
- SSTR = LTRIM$(STR$(n))
- END FUNCTION
Решение задачи: «Решение задач с использованием рекурсии»
textual
Листинг программы
- REM Программа запрашивает ввод чисел
- REM (0 - конец ввода)
- REM И выводит эти числа на экран
- REM в обратном порядке.
- REM
Объяснение кода листинга программы
- Программа запрашивает ввод чисел (0 - конец ввода).
- Программа выводит эти числа на экран в обратном порядке. Примерный псевдокод:
- Запросить число
- Если число равно 0, то программа заканчивается
- Рекурсивно вызвать процедуру с числом, уменьшенным на 1
- Вывести число на экран
- Перейти к шагу 1
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д