Инструменты пользователя

Инструменты сайта


bb:redbook:204

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
bb:redbook:204 [2017/08/30 09:31]
prospero78 [2. Вычисление факториала]
bb:redbook:204 [2017/08/30 09:46]
prospero78 [2. Вычисление факториала]
Строка 23: Строка 23:
   Hello11.odc   Hello11.odc
  
 +<code=oberon2>
 +MODULE TestHello11;
 + (* это программа на языке
 + Компонентный Паскаль. Она показывает
 + как можно вычислить произвольный факториал рекурсией. *)
 +
 + IMPORT мВв := In,
 + мЛог := Log;
 +
 + PROCEDURE Факт_Получ (пцФактор: INTEGER): INTEGER;
 + BEGIN
 + IF пцФактор = 1 THEN
 + мЛог.String('Достигнуто дно  '); мЛог.Ln;
 + RETURN 1
 + ELSE
 + мЛог.String('пцФактор='); мЛог.Int(пцФактор); мЛог.Ln;
 + RETURN пцФактор * Факт_Получ(пцФактор - 1);
 + END;
 + END Факт_Получ;
 +
 + PROCEDURE Старт*;
 + VAR
 + цФактор: INTEGER; (* факториал *)
 + цБаза: INTEGER; (* основание факториала *)
 +
 + BEGIN
 + мЛог.String('Введите основание факториала: ');
 + мВв.Open;
 + мВв.Int(цБаза); мЛог.Ln;
 + мЛог.String('BEGIN цБаза='); мЛог.Int(цБаза); мЛог.Ln;
 + цФактор := Факт_Получ(цБаза);
 + мЛог.String('f('); мЛог.Int(цБаза); мЛог.String(')= '); мЛог.Int(цФактор); мЛог.Ln;
 + END Старт;
 +
 +BEGIN
 +END TestHello11.
 +
 +"6" выделить перед пуском!!!
 +
 +^TestHello11.Старт 6 
 +</code>
        
  
-Обратите внимание, что в этом примере можно было использовать только одну переменную для вычисления факториала, если бы вывод в "Log.Int(f)выполнялся через вызов "Log.Int(GetFactorial(n))". Соответственно, строку выше можно было бы удалить и отказаться от объявления переменной "f".+Обратите внимание, что в этом примере можно было использовать только одну переменную для вычисления факториала, если бы вывод в ''мЛог.Int(цФактор)'' выполнялся через вызов ''мЛог.Int(Фактор_Получ(пцФактор))''. Соответственно, строку выше можно было бы удалить и отказаться от объявления переменной "пцФактор".
  
 Вывод программы представлен ниже: Вывод программы представлен ниже:
  
 +  компилируется "TestHello11"   220   0
 +  Введите основание факториала: 
 +  BEGIN цБаза= 6
 +  пцФактор= 6
 +  пцФактор= 5
 +  пцФактор= 4
 +  пцФактор= 3
 +  пцФактор= 2
 +  Достигнуто дно  
 +  f( 6)=  720
      
-Как видно из вывода переменная "n" с каждым вызовом действительно уменьшалась на "1", и это была настоящая рекурсия. :-)+Как видно из вывода переменная ''цБаза'' с каждым вызовом действительно уменьшалась на "1", и это была настоящая ''рекурсия''. :-)
  
 ====3. Примечания==== ====3. Примечания====
bb/redbook/204.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)