Если нельзя извлечь рекурсию из постановки задачи, то можно расширить задачу, обобщить ее (например, введя дополнительный параметр). Удачное обобщение может помочь увидеть рекурсию. После этого возвращаемся к частному случаю и решаем исходную задачу.
Пример
Определить, является ли заданное натуральное число простым.
Решение
Данную задачу можно обобщить, например, так; определить, верно ли, что заданное натуральное число N не делится ни на одно число, большее или равное M (2≤M≤N), но меньшее N.
Соответствующая функция должна принимать значение "истина" в двух случаях:
Если M=N;
Если N не делится на M и функция принимает значение "истина" для чисел М+1 и N.
ProgramExample_80;
Function Simple(M,N: Integer): Boolean;
Begin
If M=N Then Simple:=True
Else Simple:=(N Mod M<>0)
And Simple (M+1,N);
End;
Вернемся к исходной задаче. Она является частным случаем обобщенной, если M положить равным 2. Первое обращение к функции будет таким: Simple(2,N), где N − это данное число.
Задание
Изучить работу функции в пошаговом режиме и нарисовать схему вызовов функций.
Задачи, в которых можно
Использовать характеристику или свойство функции
Пример
Для заданного натурального числа N≥1 определить натуральное число a, для которого выполняется неравенство: 2a-1≤N≤2a.