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

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


bb:redbook:204

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
bb:redbook:204 [2017/08/30 09:36]
prospero78 [2. Вычисление факториала]
bb:redbook:204 [2017/08/30 09:46]
prospero78 [2. Вычисление факториала]
Строка 29: Строка 29:
  как можно вычислить произвольный факториал рекурсией. *)  как можно вычислить произвольный факториал рекурсией. *)
  
- IMPORT In, Log, Math;+ IMPORT мВв := In, 
 + мЛог := Log;
  
  PROCEDURE Факт_Получ (пцФактор: INTEGER): INTEGER;  PROCEDURE Факт_Получ (пцФактор: INTEGER): INTEGER;
  BEGIN  BEGIN
  IF пцФактор = 1 THEN  IF пцФактор = 1 THEN
- Log.String('Достигнуто дно  '); Log.Ln;+ мЛог.String('Достигнуто дно  '); мЛог.Ln;
  RETURN 1  RETURN 1
  ELSE  ELSE
- Log.String('пцФактор='); Log.Int(пцФактор); Log.Ln;+ мЛог.String('пцФактор='); мЛог.Int(пцФактор); мЛог.Ln;
  RETURN пцФактор * Факт_Получ(пцФактор - 1);  RETURN пцФактор * Факт_Получ(пцФактор - 1);
  END;  END;
Строка 48: Строка 49:
  
  BEGIN  BEGIN
- Log.String('Введите основание факториала: '); + мЛог.String('Введите основание факториала: '); 
- In.Open; + мВв.Open; 
- In.Int(цБаза); Log.Ln; + мВв.Int(цБаза); мЛог.Ln; 
- Log.String('BEGIN цБаза='); Log.Int(цБаза); Log.Ln;+ мЛог.String('BEGIN цБаза='); мЛог.Int(цБаза); мЛог.Ln;
  цФактор := Факт_Получ(цБаза);  цФактор := Факт_Получ(цБаза);
- Log.String('f('); Log.Int(цБаза); Log.String(')= '); Log.Int(цФактор); Log.Ln;+ мЛог.String('f('); мЛог.Int(цБаза); мЛог.String(')= '); мЛог.Int(цФактор); мЛог.Ln;
  END Старт;  END Старт;
  
Строка 65: Строка 66:
        
  
-Обратите внимание, что в этом примере можно было использовать только одну переменную для вычисления факториала, если бы вывод в "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 (внешнее изменение)