Функция факториала в паскале

Функция факториала в паскале

Факториал — произведение натуральных чисел от единицы до заданного числа. Имеет условное обозначение в виде восклицательного знака. n!=1*2*3*. *n (Например: 3!=1*2*3=6).

В Turbo Pascal факториал находится, как правило, двумя способами: с помощью цикла или с помощью рекурсии.

Вычисление факториала в pascal с помощью цикла

Данный способ нахождения факториала исключительно прост. В цикле от 1 до n умножается число само на себя. При этом необходимо учитывать условие, что 0!=1. Ниже представлена реализация программы с помощью цикла for. Аналогично используются repeat и while.

if (n=0) then writeln(‘0!=1’) else

if x=0 then fact:=1

Факториал числа — Вычисление с помощью цикла (1 способ)

Факториал — Нахождение факториала в паскале с помощью рекурсии (2 способ)

Программирование. Рекурсия Pascal-Паскаль

  • Скачено бесплатно: 9375
  • Куплено: 414
  • Pascal-Паскаль->Программирование. Рекурсия Pascal-Паскаль

Рекурсия Pascal-Паскаль

Подпрограммы в Паскале могут обращаться сами к себе. Такое обращение называется рекурсией.

Для того чтобы такое обращение не было бесконечным, в тексте подпрограммы должно быть условие, по достижению которого дальнейшее обращение к подпрограмме не происходит.

Пример.

Рассмотрим математическую головоломку из книги Ж. Арсака «Программирование игр и головоломок».

Построим последовательность чисел следующим образом: возьмем целое число i>1. Следующий член последовательности равен i/2, если i четное, и 3 i+1, если i нечетное. Если i=1, то последовательность останавливается.

Математически конечность последовательности независимо от начального i не доказана, но на практике последовательность останавливается всегда.

Применение рекурсии позволило решить задачу без использования циклов, как в основной программе, так и в процедуре.

Пример программы с использованием рекурсии

Программист разрабатывает программу, сводя исходную задачу к более простым. Среди этих задач может оказаться и первоначальная, но в упрощенной форме. Например, для вычисления F( N) может понадобиться вычислить F( N-1). Иными словами, частью алгоритма вычисления функции будет вычисление этой же функции.

Читайте также:  Как подключить джойстик speedlink к компьютеру

Алгоритм, который является своей собственной частью, называется рекурсивным. Часто в основе такого алгоритма лежит рекурсивное определение.

Пример рекурсивного алгоритма

Любое рекурсивное определение состоит из двух частей. Одна часть определяет понятие через него же, другая часть – через иные понятия.

Пример рекурсивного алгоритма

Процедура является рекурсивной, если она обращается сама к себе прямо или косвенно (через другие процедуры).

Заметим, что при косвенном обращении все процедуры в цепочке – рекурсивные.

Все сказанное о процедурах целиком относится и к функциям.

Пример рекурсивной функции вычисления факториала

Рекурсия изнутри

Это может показаться удивительным, но самовызов процедуры ничем не отличается от вызова другой процедуры. Что происходит, если одна процедура вызывает другую? В общих чертах следующее:

  • в памяти размещаются параметры, передаваемые процедуре (но не параметры-переменные!);
  • в другом месте памяти сохраняются значения внутренних переменных вызывающей процедуры;
  • запоминается адрес возврата в вызывающую процедуру;
  • управление передается вызванной процедуре.

Если процедуру вызвать повторно из другой процедуры или из нее самой, будет выполняться тот же код, но работать он будет с другими значениями параметров и внутренних переменных. Это и дает возможность рекурсии.

Пусть рекурсивная процедура Power( X, N, Y) возводит число X в степень N и возвращает результат Y .

Пример рекурсивной процедуры, возводящей число в степень

Проследим за состоянием памяти в процессе выполнения вызова данной процедуры Power(5,3, Y). Стрелка «->» означает вход в процедуру, стрелка « Пример рекурсивной программы вычисления функции

Рекурсивная программа построения снежинки

Написать программу, строящую на экране изображение:

Изображение строится по следующему правилу: строится окружность с заданным радиусом r. Затем на диаметрально противоположных точках окружности ( x- r и x+ r)строится вновь окружность меньшего радиуса ( r=3 r/5). Для каждой меньшей окружности на диаметрально противоположных точках вновь строится окружность меньшего радиуса, и т.д., пока радиус не уменьшится до 10.

Читайте также:  Как делают сим карты

Пример рекурсивной программы построения окружностей

Программирование

Исходники Pascal (127)

Справочник

Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту

Вычислить факториал заданного числа n (n> 0) () — тоесть произведение чисел от 1 до n.

Вот подобное, но у меня не выходит.

2 ответа 2

Потому что вы, как я понимаю, первоначально хотели, чтобы значение факториала содержалось в переменной "s", но позже зачем-то завели переменную "f", которая вообще хранит в себе адрес ячейки памяти, в которой находится (Вы же её не обнулили). Вот функция, возвращающая факториал до "n":

Чуток осталось — присвоить начальное значение переменной f. Сейчас она не инициализирована, поэтому итоговое значение равно нулю.

Ссылка на основную публикацию
Форум лексус рх 350 2007
Как выбрать Lexus RX?Надёжная ли машина?Какой расход топлива?Какие бывают комплектации?Насколько нужны те или иные функции?На что смотреть при покупке? Информация...
Уроки нлп для начинающих
Если вы хотя бы немного интересуетесь психологией, то о нейролингвистическом программировании (НЛП), наверное, тоже слышали. В статье мы постараемся объяснить...
Уроки ворд 2010 для начинающих
Microsoft Office 2010 — бесплатные обучающие уроки для чайников с нуля. Получите необходимые навыки профессиональной работы с пакетом Microsoft Office...
Форум грибников витебской области
В Беларуси много грибов: белые грибы, подосиновики, лисички и др. #новостиlespr или #newslespr - добавляйте фото в инстаграм с таким...
Adblock detector