0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
1

Рекурсивная функция

08.05.2013, 22:48. Показов 1571. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Походу что-то с массивами не то, когда ввожу слишком большое число (15+), то выбивает ошибку с кучами\стеками, которую я не понимаю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using namespace std;
void rekursija(long long factorials[], int ArSize);
int main()
{
    cout << "Pls enter the number: " << endl;
    int ArSize;
    cin >> ArSize;
    long long * factorials = new long long[ArSize];
    
    rekursija(factorials, ArSize);
 
    system ("pause");
    return 0; 
}
 
void rekursija(long long factorials[], int ArSize)
    {
    factorials[1] = factorials[0] = 1;
    for (int i = 2; i < ArSize; i++)
    {
        factorials[i] = i * factorials[i-1];
    };
    for (int i = 0; i < ArSize; i++)
        std::cout << i << "! = " << factorials[i] << std::endl;
 
    cin >> ArSize;
    delete []factorials;
        if(ArSize != 0)
        {
        rekursija(factorials, ArSize);
        };
 
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2013, 22:48
Ответы с готовыми решениями:

Рекурсивная функция
Как написать рекурсивную функцию для реализации рекуррентной последовательности? В основной программе вывести первые n членов...

Рекурсивная функция
С помощью рекурсии выполнить следующее задание: Рассчитать число рыбок - самок, выращенных в аквариуме за &quot;N&quot; месяцев, если...

Рекурсивная функция
Скласти програму з використанням рекурсивної функції, в якій обчислити суму 12 членів рекурентної послідовності : X0=1;X1=1;Xk=0,7Xk-1+...

15
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
08.05.2013, 23:43 2
ошибку приведи
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
08.05.2013, 23:47 3
А sizeof( long long ) у тебя чему равен?
1
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 00:34  [ТС] 4
Рекурсивная функция


Добавлено через 30 минут
Еще такая ошибка иногда, в прошлый раз было похожее когда я массив new не удалял в цикле вроде.
cout << sizeof( long long ) равен 8, но поидее же при переполнении он должен по кругу крутится не?
Рекурсивная функция
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.05.2013, 00:37 5
А. Ну так попробуй размер стека увеличить! Возможно для рекурсии его не хватает. Как это делается в MSVS я, увы, не знаю..
1
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 01:01  [ТС] 6
Еще заметил что ошибка выскакивает после ввода 2-3-го значения.

Добавлено через 16 минут
Никто не подскажет как увеличить стек в VS2010, русская версия. Я никак не могу найти.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.05.2013, 01:06 7
Нашел. Параметр "/F размер_стека".
Свойства проекта -> С/С++ -> Командная строка -> Дополнительные параметры
(переведено с английского, может быть немного не так)

http://msdn.microsoft.com/en-u... s.71).aspx
1
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 01:28  [ТС] 8
Я так понял вот тут надо было изменения сделать. Но тогда при построении ошибка
1>cl : командная строка error D8021: недопустимый числовой аргумент "/F[500000]number"
Рекурсивная функция
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.05.2013, 01:33 9
Нет, ты не так пишешь. Надо: /F[пробел]размер_стека --- пробел в скобках - означает пробел! Скобки не нужны!

Добавлено через 1 минуту
Т.е. пиши просто: "/F 500000"
1
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 01:37  [ТС] 10
Исправил, поставил /F 50000000 , но все равно те же ошибки. А код точно правильный? У вас все нормально работает?

В смысле ошибки не с "/F 50000000", а с переполнением этим.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.05.2013, 01:49 11
Пффф... В 27-й строке ты удаляешь массив factorials, а потом в 30-й ты его снова используешь! Зачем!?)))

Добавлено через 54 секунды
И зачем тебе 26-я строка!?

Добавлено через 1 минуту
И замени везде тип long long на unsigned long long.

Добавлено через 26 секунд
И стек сдесь не при чем..

Добавлено через 3 минуты
В общем удаляй 26-ю, и с 28-й по 32-ю.
1
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 12:46  [ТС] 12
Ну я пробовал и удалять и нет, результат один и тот же. А если удалить условие и новый ввод то получится безконечный цикл, задумка в том чтоб программа принимала и обрабатывала значения до ввода "0", или чего-то еще, это не важно. Используя при этом эту долбаную рекурсию. Или я тебя не правильно понял, хз.

Добавлено через 9 минут
Меня смущает то что при каждом запуске программы, ошибка появляется при вводе совершенно разных значений. Если так и должно быть, то норм.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.05.2013, 12:50 13
У меня так работает без проблем:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
using namespace std;
 
void rekursija(unsigned long long factorials[], int ArSize);
 
int main()
{
    cout << "Pls enter the number: " << endl;
    int ArSize;
    cin >> ArSize;
    unsigned long long * factorials = new unsigned long long[ArSize];
    
    rekursija(factorials, ArSize);
 
    delete []factorials;
 
    system ("pause");
    return 0; 
}
 
void rekursija(unsigned long long factorials[], int ArSize)
    {
    factorials[1] = factorials[0] = 1;
    for (int i = 2; i < ArSize; i++)
    {
        factorials[i] = i * factorials[i-1];
    };
    for (int i = 0; i < ArSize; i++)
        std::cout << i << "! = " << factorials[i] << std::endl;
}
Если хочешь зациклить пока не введут 0, тогда делай это в main.
1
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 12:56  [ТС] 14
Но нету рекурсии, типа использования функции в функции.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.05.2013, 13:04 15
А ну да. Я вообще не понимаю зачем тебе массив. Нужна рекурсивная функция факториала:
C++
1
2
3
4
unsigned long long factorial( unsigned long long i ) {
    if ( i <= 1 ) return 1;
    return i * factorial( i - 1 );
}
Ставь её в цикл и заполняй массив, если без него никак.
1
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 13:24  [ТС] 16
Действительно, массив не нужен был, так как надо было только отображать. Я завис на этом, так как в предыдущей проге с факториалом использовался массив. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2013, 13:24
Помогаю со студенческими работами здесь

Рекурсивная функция
Нужно написать рекурсивнюю функцию сложения двух чисел, используя только прибавление единицы.

Рекурсивная функция
Здравствуйте, помогите написать программу на языке С++ Для заданного одномерного массива A из N элементов проверить, что существует по...

рекурсивная функция
Описать рекурсивную функцию вычисления значения по указанной формуле. Понимаю, что программа совсем лёгкая, но я никак не могу свыкнуться...

Рекурсивная функция: поиск наименьшего пути из левого верхнего угла матрицы в правый нижний
Здравствуйте! Осваиваю рекурсивные функции на C++ Написал классический алгоритм (динамическое программирование) для поиска...

Рекурсивная функция y=3x+5
Здравствуйте! Помогите написать прогу(или если есть готовое решение буду благодарен! Век помнить буду) на c++, которая решает данный...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
Apache Airflow для оркестрации и автоматизации рабочих процессов
Mr. Docker 16.03.2025
Управление сложными рабочими процессами — одна из главных головных болей инженеров данных и DevOps-специалистов. Представьте себе: каждый день нужно запускать десятки скриптов в определенной. . .
Оптимизация приложений Java для ARM
Javaican 16.03.2025
ARM-архитектура переживает настоящий бум популярности в технологическом мире. Когда-то воспринимаемая исключительно как решение для мобильных устройств и встраиваемых систем, сегодня она штурмует. . .
Управление состоянием в Vue 3 с Pinia и Composition API
Reangularity 16.03.2025
Когда я начал работать с Vue несколько лет назад, мне казалось достаточным использовать простую передачу данных через props и события между компонентами. Однако уже на среднем по сложности проекте. . .
Введение в DevSecOps: основные принципы и инструменты
Mr. Docker 16.03.2025
DevSecOps - это подход к разработке программного обеспечения, который объединяет в себе принципы разработки (Dev), безопасности (Sec) и эксплуатации (Ops). Суть подхода заключается в том, чтобы. . .
GitHub Actions vs Jenkins: Сравнение инструментов CI/CD
Mr. Docker 16.03.2025
В этой битве за эффективность и скорость выпуска программных продуктов ключевую роль играют специализированные инструменты. Два гиганта в этой области — GitHub Actions и Jenkins — предлагают разные. . .
Реактивное программировани­е с Kafka Stream и Spring WebFlux
Javaican 16.03.2025
Реактивное программирование – это программная парадигма, ориентированная на потоки данных и распространение изменений. Она позволяет выражать статические или динамические потоки данных и. . .
Простая нейросеть на КуМир: Учебное пособие по созданию и обучению нейронных сетей
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru