Рекурсия, выведите все нечетные числа последовательности, сохраняя их порядок - Free Pascal
Формулировка задачи:
Дана последовательность натуральных чисел (одно число в строке), завершающаяся числом 0. Выведите все нечетные числа из этой последовательности, сохраняя их порядок.
В этой задаче нельзя использовать глобальные переменные и передавать какие-либо параметры в рекурсивную функцию. Функция получает данные, считывая их с клавиатуры. Функция не возвращает значение, а сразу же выводит результат на экран. Основная программа должна состоять только из вызова этой функции.
Никак не могу усвоить рекурсия, помогите, пожалуйста.
Решение задачи: «Рекурсия, выведите все нечетные числа последовательности, сохраняя их порядок»
textual
Листинг программы
function f : string; var X : integer; begin f := ''; readln(X); if X <> 0 then begin if odd(X) then write(X, ' ', f()) else write(f()) end end; begin f() end.
Объяснение кода листинга программы
В данном коде реализована функция f, которая принимает на вход целочисленное значение X.
- Сначала определяется пустая строка
f, которая будет использоваться для накопления результата. - Затем считывается значение
Xс помощью функцииreadln. - Если
Xне равно нулю, то выполняется следующая часть условия: - Проверяется, является ли
Xнечетным числом с помощью функцииodd. - Если
Xнечетное, то вызывается рекурсивная функцияf, и результат добавляется в строкуfс помощью функцииwrite. - Если
Xчетное, то вызывается только функцияwriteдля вывода строкиf. - В конце вызывается функция
fдля начала процесса. Таким образом, данный код рекурсивно выводит все нечетные числа, которые считываются с помощью функцииreadln, сохраняя порядок их следования.