Рекурсия в Pascal, рекурсивни функции и процедури

Рекурсия в Pascal, рекурсивни функции и процедури

Ако тялото на функцията отговаря на предизвикателството на този много функции. то това е рекурсия.

Рекурсивно в Pascal може да има и двете функции и процедури.

В действителност, рекурсия може да бъде безкраен. Но, както при всеки друг алгоритъм, той трябва да се върне в резултат след определен определен брой операции.

Затова е важно: На всяка стъпка на процедура или функция на тялото рекурсивния непременно промяна в параметрите на функцията, или наличието на условия, в които вече се не няма да доведе!

Помислете за един прост пример за използване на рекурсивни процедура:

Пример: номера печат последователност в ob.patno ред с помощта на рекурсивни процедура повикване. nappimep:
ред (5) = 5 4 3 2 1
От състоянието на проблема е ясно, че състоянието на завършване на рекурсия е самата аргумент функция, която трябва да се намали с един до е> = 1.

процедура ред (п: число); започва, когато п> = 1 тогава започва записване (п '); ред (п-1) край; приключи; започне ред (10); край.

А сега да разгледаме един по-сложен пример за използване на рекурсия в Паскал.

Пример: Добави рекурсивен процедура, която показва номера минута като реални числа параметри в обратен ред.

Например: ако премина функцията включително 3078. крайна сметка трябва да върне 8703
Използвайте мод и Разделение операции

процедура обратната (п: число); започнете запис (п мод 10); ако (п Разделения 10) <> 0 след това обратно (п Разделения 10) край; започнем writeln; обратно (3078); край.

Рекурсия: печат последователност използване рекурсия:
25,23,21,19,17 ... 0


Сега нека видим как рекурсията се използва при изчисляване на факториел в Паскал.

Пример: Извършване на рекурсивни функции за изчисляване на факториел

Съвет:
2! = 2 * 1 = 2
3! = 3 * 2 * 1 = 6
Се получи формула с! = A * ((а-1)!)

Рекурсия в Pascal, рекурсивни функции и процедури

Var х: цяло число; Всъщност функция (А: число): цяло число; започне, ако (а<=1) then a:=1 else a:=a*(fact(a-1)); fact:=a; end; begin writeln('Число?'); readln(x); writeln(fact(x)); end.

Рекурсия в Pascal, рекурсивни функции и процедури

Рекурсия: Напишете рекурсивна функция sumTo (н). че за даден п изчислява сумата на числата от 1 до п. например:
sumTo (1) = 1
sumTo (2) = 2 + 1 = 3
sumTo (3) = 3 + 2 + 1 = 6
.

Рекурсия. Напишете рекурсивна функция за определяне на степента.

Var х, у: цяло число; функция stepen (а, б: число): цяло число; Var. започне. приключи; започнем writeln ( "номер"); readln (х); writeln ( "степен"); readln (у); writeln (stepen (х, у)); край.

Рекурсия: Необходимо е да се симулира работата на за цикъл. На всеки път, когато думата "здравей" и стойността на брояча. За да направите това, използвайте променлива брояч стъпка, за да се реализира в рамките на параметъра на процедура. Вторият вариант - общият брой на стъпки (брой на повторения на цикъла).

Рекурсия: Намерете GCD от Евклид. Използвайте рекурсивни процедура.

За номера 3430 и 1365:

остатък от участък 3430-1365

3,430 мод 1365 = 700

остатъкът не е нула, да се повтори същото действие, замествайки за първи брой секунди, и вместо втория - остатъкът

1,365 мод 700 = 665

остатък и нула, така друга разделителна

700 мод 665 = 35

остатък и нула, така друга разделителна

Рекурсия: Отпечатване на първите 10 числа на Фибоначи (до 21), като се използва рекурсивен процес с два параметъра.
Резултатът трябва да бъде: 1 2 3 5 8 13 21 34 55 89
Пълна код: