Напиши программу на языке паскаль вычислить n если значение n пользователь вводит с клавиатуры
Замечу, если вы плохо разбираетесь в глобальных и локальных переменных, что наше введенное n , в функции будет x . n – глобальная переменная, x – локальная. Значения переменной « x » не уйдут дальше функции, мы сможем ей пользоваться только в теле функции и нигде больше.
Стандартные операторы, такие как readln , writeln я думаю понятны. Поэтому сразу перейдем разбирать написанную функцию factorial . С виду обычная функция, кроме одного момента, а именно условие if . Здесь именно это условие помогает нам определить условие выхода из функции или продолжение на выполнение. if x = 1 then factorial:= 1else factorial:= x * factorial (x-1); Разберем условие с конца, если x >1, получаем factorial := x * factorial ( x -1). Как же работает это выражение? Вы спросите как так, мы вводим, к примеру, число 5, а он поочередно умножает нам каждое число от 1 до 5? В дальнейшем для примера буду использовать число 5. На самом деле очень просто. Сейчас наглядно приведу примеры на простом языке. Можете заметить, что в каждом случае выражение вызывает функцию факториала(то есть саму себя) и уменьшает значение « x » на единицу, тем самым вычисляем факториал не с 1, а с 5 и мы получаем, что разбираясь по действиям, происходит следующее:Замечу сразу, что он не использует Именно ту же самую функцию, а создает альтернативную копию в ячейке памяти, но на деле используем одну. То есть при вызове факториала 5, будет 5 функций в памяти для вычисления каждого числа в отдельности.
Вызов функции
factorial:= 5 * factorial (5-1)
Пока что мы не можем вычислить factorial числа 5, так как мы вызвали функцию еще раз и необходимо вычислить теперь факториал 4
factorial:= 4 * factorial (4-1)
Пока что мы не можем вычислить factorial числа 4, так как мы вызвали функцию еще раз и необходимо вычислить теперь факториал 3
factorial:= 3 * factorial (3-1)
Пока что мы не можем вычислить factorial числа 3, так как мы вызвали функцию еще раз и необходимо вычислить теперь факториал 2
factorial:= 2 * factorial (2-1)
Пока что мы не можем вычислить factorial числа 2, так как мы вызвали функцию еще раз и необходимо вычислить теперь факториал 1
if x = 1 then factorial:= 1.
Теперь x = 1 и функция прекращает своё действие и возвращаем 1.
Теперь программа можем вычислить факториалы поочередно от 1 до 5, так как мы больше не вызываем нашу функцию.
Как только мы дошли до условия выхода из функции x = 1, получилось следующее:Вызов функции
factorial:= 2 * factorial (1)
В factorial (1) нам вернулось число 1 и записываем значение в factorial = 2;
factorial:= 3 * factorial (2)
В factorial (2) нам вернулось число 2 и записываем значение в factorial = 6;
factorial:= 4 * factorial (3)
В factorial (3) нам вернулось число 6 и записываем значение в factorial = 24;
factorial:= 5 * factorial (4)
В factorial (4) нам вернулось число 24 и записываем значение в factorial = 120;
Читайте также: