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

Рекурсивное вычисление факториала

01.11.2019, 10:00. Показов 1517. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Factorial(int n){
    if(n <= 1){
        return 1;
    }
 
    return n * Factorial(n - 1);
}
 
int main(){
    cout << Factorial(4) << endl;
 
    return 0;
}
Подскажите, почему при передаче другого числа в
C++
1
return 1;
(например 2 или 3 т.д.), значение вычисляемого факториала в
C++
1
return n * Factorial(n - 1);
будет увеличиваться? Как эти два return'a связаны?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2019, 10:00
Ответы с готовыми решениями:

Рекурсивное вычисление
Доброе время суток!!! Помогите пожалуйста решить две задачи с помощью рекурсии. За ранее огромное спасибо!!! Задача №1. Написать...

Рекурсивное вычисление суммы.
Здравствуйте! Помогите пожалуйста. Написать программу, рекурсивно вычисляющую сумму. Найти сумму ряда с точностью Eps, общий член...

Рекурсивное вычисление НОК
return (b &lt; 1 ? (b ? NOK(b, a % b) : a) : (a / -NOK(-b, -a % b) * b)); // РЕБЯТА ОБЪЯСНИТЕ ПОЖАЛУЙСТА ЭТУ СТРОЧКУ. СРОЧНО НУЖНО!!!

8
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
01.11.2019, 10:10
вопрос к вам сколько будет факториал единицы?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.11.2019, 10:20
Цитата Сообщение от marat_miaki Посмотреть сообщение
сколько будет факториал единицы?
или нуля...
0
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 11
01.11.2019, 10:31  [ТС]
У обоих факториалов значение равно 1, только мне это никак не помогает прояснить ситуацию...
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.11.2019, 10:34
Цитата Сообщение от DemidTes Посмотреть сообщение
прояснить ситуацию...
Возьми в руки карандашик. И попробуй записать, что происходит в каждой строчке функции.
0
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 11
01.11.2019, 12:04  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
Возьми в руки карандашик
Лучший ответ на вопрос из всех, что мне ранее встречались.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.11.2019, 12:18
DemidTes, а ты знаешь, этим приемом не брезгают пользоваться и опытные программисты. Когда непонятен чужой код или чудит свой.
Но если карандашика под рукой нет или лень его точить, можно воспользоваться таким приемом
C++
1
2
3
4
5
6
7
8
9
int Factorial(int n){
    cout << "Вход в функцию n=" << n << endl;
    if(n <= 1){
        return 1;
    }
    int f = n * Factorial(n - 1);
    cout << "f=" << f << endl;
    return f;
}
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
01.11.2019, 12:20
Лучший ответ Сообщение было отмечено DemidTes как решение

Решение

DemidTes, смотри: читаем по строчкам:
Цитата Сообщение от DemidTes Посмотреть сообщение
C++
1
2
3
4
5
6
int Factorial(int n){
 if(n <= 1){
 return 1;
 }
return n * Factorial(n - 1);
}
Начинаем с простого случая n=1;
Равно оно 1? если да, то зашли под условие в строке 2 и закончили и выдав ответ "1". Правильно? 1!=1

Если n =2, то:
Условие в строке 2 не выполнилось и мы не зашли внутрь, а сразу перескочили в строку 6. Тут мы должны выдать ответ n * Factorial(n - 1), а это значит что 2 * Factorial(2 - 1). Таким образом, прежде чем вернуть ответ мы снова вызвали ту же самую функцию, но с меньшим n (теперь оно =1). Эта функция нам возвращает 1 (как мы уже выяснили выше), умножаем на 2. Конечный ответ 2. Правильно? 2!=2.

Если n=3 сделайте сами и убедитесь что оно так же работает.
Ну и экстраполируйте для n
1
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 11
02.11.2019, 18:16  [ТС]
Цитата Сообщение от Крашеная Посмотреть сообщение
DemidTes, смотри: читаем по строчкам:
Боже, спасибо! Хоть кто-то объяснил нормально)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2019, 18:16
Помогаю со студенческими работами здесь

Рекурсивное вычисление функции
Функция f(n) определяется рекурсивно: f(2*n)=f(n),f(2*n+1)=f(n)+f(n+1), f(0)=0,f(1)=1.написать программу вычисляющую функцию f(n)

Рекурсивное вычисление x!-sin(x)
помогите пожалуйста написать программу s=x!-sin(x)

Рекурсивное вычисление суммы ряда
Всем добрый день, не могу понять как составить рекурсивную функцию (с циклом получилось, но рекурсия не даётся :( ) Буду очень благодарен...

Рекурсивное вычисление биномиальных коэффициентов
Привет! Буду рад, если кто то поможет решить: &quot;Рекурсивно описать функцию С(m,n), где 0≤m≤n для вычисления биномиального...

Рекурсивное вычисление функции Аккермана
Составить программу вычисления значений функции Аккермана для неотрицательных чисел n и m, вводимых с клавиатуры. A(n,m) = совокупность...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru