Напишите рекурсивную процедуру - Prolog

Узнай цену своей работы

Формулировка задачи:

Напишите рекурсивную процедуру

Решение задачи: «Напишите рекурсивную процедуру»

textual
Листинг программы
run:-
write('Введите n: '), read(N), nl, prov(N).
 
prov(N):- N>0, strannost(N,Rez), write('Rez: '), write(Rez).
prov(N):- N<0, write('Введённое число меньше нуля!').
 
strannost(N,Rez):- N=:=1, Rez is 1.
strannost(N,Rez):- Ch is N mod 2, Ch=:=0, N1 is N/2, strannost(N1,Rez).
strannost(N,Rez):- Ch is N mod 2, Ch\=0, N1 is (3*N+1)/2, strannost(N1,Rez).

Объяснение кода листинга программы

  1. Ввод числа n с помощью функции read, выводим сообщение с просьбой ввести число n.
  2. Если n больше 0, то вызываем функцию strannost с аргументами n и rez, значение rez равно 1.
  3. Если n меньше 0, то выводим сообщение, что введённое число меньше нуля!
  4. В функции strannost проверяем, равно ли n единице, если да, то rez равно 1.
  5. Если n не равно единице, то находим остаток от деления n на 2 и сохраняем его в переменной Ch.
  6. Если Ch равно нулю, то n чётное, делим n на 2 и вызываем функцию strannost с аргументами (n/2) и rez.
  7. Если Ch не равно нулю, то n нечётное, прибавляем 3 к n и делим полученное число на 2, затем вызываем функцию strannost с аргументами ( (3*n+1)/2 ) и rez.

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

14   голосов , оценка 3.714 из 5
Похожие ответы