Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 31.07.2013
Сообщений: 31

Нахождение факториала

04.03.2014, 11:13. Показов 1482. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
 
unsigned long factroial(unsigned long);
int main()
{
    for (int counter=0;counter<=10;counter++)
        cout << setw(2) << counter << "! = " << factroial( counter )
        << endl;
 
    return _getch();
}
C++
1
2
3
4
5
6
7
8
9
10
11
unsigned long factroial(unsigned long number)
{
    if (number <=1)
    {
        return 1;
    }
    else
    {
        return number*factroial(number - 1);
    }
}
не могу понять как программа вычисляет факториал. (знаю что 4! это 4*3*2*1, но как это делает программа не пойму)

Например: 4!
т.е если counter = 4 то и number = 4 и еще - 1
то у меня получается 3*4=12 а у программы 24, т.е у меня не правильно а у нее правильно, объясните как программа вычисляет.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.03.2014, 11:13
Ответы с готовыми решениями:

нахождение факториала
Вот, написал программу, но почему-то ответ неправильный постоянно выходит, подскажите, что я делаю не так? #include &lt;iostream&gt; ...

Нахождение факториала рекурсией
помогите написать программу для нахождения n факториала рекурсивным методом

Циклическое нахождение факториала
Здравствуйте. Дело в том, что почему то значение факториала складывается со значением предыдущего факториала. В чем ошибка? #include...

7
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2014, 11:27
Цитата Сообщение от go100gi Посмотреть сообщение
то у меня получается 3*4=12 а у программы 24
Запись
C++
1
return number*factroial(number - 1);
значит не 4*3, а 4*fac(3). При этом: fac(3) = 3*fac(2). fac(2) = 2*fac(1). fac(1) = 1. В итоге:
fac(4) = 4*3*2*1.
0
1 / 1 / 0
Регистрация: 31.07.2013
Сообщений: 31
04.03.2014, 11:30  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
значит не 4*3, а 4*fac(3). При этом: fac(3) = 3*fac(2). fac(2) = 2*fac(1). fac(1) = 1. В итоге:
fac(4) = 4*3*2*1.
так, а почему так? почему он умножает 4*3*2*1 а не 4*3?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2014, 11:32
Цитата Сообщение от go100gi Посмотреть сообщение
почему он умножает 4*3*2*1 а не 4*3?
Потому что так правильно.
C++
1
2
return 4*3; // 12 
return 4*f(3); // 24
Разницу видите м/у этими строками?
1
1 / 1 / 0
Регистрация: 31.07.2013
Сообщений: 31
04.03.2014, 11:43  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Потому что так правильно.
т.е он отнимает единицу и умножает 4*3 а потом опять отнимает единицу и умножает 3*2, а почему не 4*2 ведь он забрал ее у той же переменной.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2014, 11:47
go100gi, почитайте про рекурсию что ли. Вкратце: функция вызывает саму себя (но с другим набором входных данных).
1
1 / 1 / 0
Регистрация: 31.07.2013
Сообщений: 31
04.03.2014, 11:50  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
почитайте про рекурсию что ли. Вкратце: функция вызывает саму себя (но с другим набором входных данных).
еще вопрос,

C++
1
return number*factroial(number - 1);
я правильно понял, это вызов функции? я сначала подумал что это number - 1, а скобки поставлены для приоритета.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2014, 11:52
Лучший ответ Сообщение было отмечено go100gi как решение

Решение

Цитата Сообщение от go100gi Посмотреть сообщение
это вызов функции?
Да, это вызов функции. О чем я Вам писал ещё во втором сообщении
Если бы были просто скобки, то это задавало бы приоритет вычислений, но тут же еще и имя указано. Поэтому такая запись является вызовом функции.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2014, 11:52
Помогаю со студенческими работами здесь

Нахождение факториала без рекусрсии
Дайте код на функцию, которая находит факториал числа определенного(которое она берет в аргумент)

Рекурсия: нахождение двойного факториала
Помогите пожалуйста как это можно написать. Y=(2*n+1)!!*(2*m+1)!!/(2*(m+n)+1)!!,где m,n неотрицательные целые числа.Для определения...

Нахождение факториала числа n с вводом из файла
Здравствуйте! В общем мне нужно написать программку, которая считала бы факториал числа n типа int и чтобы число для расчета бралось из...

Нахождение двойного факториала заданного числа N
Дано целое число N (&gt; 0). Найти двойной факториал N: N!! = N·(N–2)·(N–4)·… (последний сомножитель равен 2, если N — четное, и 1, если N...

Нахождение факториала: для заданного N найти последнюю отличную от нуля цифру
Факториалом натурального числа N (обозначается как N!) называется произведение всех натуральных чисел от 1 до N. Например, 5! = 1*2*3*4*5 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru