Язык Си в примерах/Факториал: различия между версиями

Содержимое удалено Содержимое добавлено
м Ссылки; избыточные <big /> и <font /> вокруг <source />; пробелы.
Строка 7:
В приведенной ниже программе определена функция <tt>factorial</tt>, вычисляющая факториал.
 
<big><source lang="c">
#include <stdio.h>
int factorial(int x) {
Строка 17:
printf("%d\n", factorial (n));
}
</source></big>
 
Это определение основано на следующей '''рекуррентной'''
Строка 28:
Если бы не было тернарной операции ?
 
<big><source lang="c">!x ? 1 : x * factorial(x - 1)</source></big>
 
заменяющей собой условный оператор
 
<big><source lang="c">if( x == 0 ) return 1; else return x * factorial(x - 1);</source></big>
 
то функция <tt>factorial</tt> постоянно бы вызывала саму себя, и во
Строка 52:
Можно ещё реализовать эту же задачу такой программой:
 
<big><source lang="c">
#include <stdio.h>
main()
Строка 66:
return 0;
}
</source></big>
 
Эта программа основана на последовательном умножении натуральных чисел пока не будет достигнуто число n.<br>
Строка 77:
Вариант без рекурсии
 
<big><source lang="c">
#include <stdio.h>
int factorial(int x) {
Строка 90:
printf("%d\n", factorial (n));
}
</source></big>
 
В отличие от варианта с рекурсией введена дополнительная локальная переменная. Но, в отличие от первого варианта, не требуется выделение нового стека на очередном шаге. Справедливо отметить, что компиляторы могут оптимизировать рекурсии, а также, что в данной конкретной задаче это не столь значимо.
== Пример 4 ==
Вариант без рекурсии и только для положительных чисел
<big><source lang="c">
typedef unsigned int size_t;
size_t factorial(size_t p_n)
Строка 103:
return v_res;
}
</source></big>
== Задания ==