Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
#1

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

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

Походу что-то с массивами не то, когда ввожу слишком большое число (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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 22:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсивная функция (C++):

Рекурсивная функция - C++
Вычислить элементы ряда с помощью рекурсивной функции. Порядок вычисления элементов ряда: a(1)=1, a(n)=5*(2n-1)n-a(n-1), n&gt;0 ...

Рекурсивная функция - C++
...помогите пожалуйста сделать задачки... http://cs4734.vkontakte.ru/u26212689/96588963/x_20024bb4.jpg ...

Рекурсивная функция! - C++
Разработать рекурсивную функцию, возвращающую значение , для вычисления n-го члена последовательности b1 =5, bn+1=bn/(n2+n+1). Не знаю...

Рекурсивная функция - C++
ПРивет всем! ребят помогите решать вот такую задачку: Используя команды write(x) лишь при х=0,1,…9 написать рекурсивную процедуру вывода...

Рекурсивная функция - C++
Помогите, нужна задача, звучит так: Напечатать в обратном порядке последовательность чисел, признаком конца которой является 0. ...

Рекурсивная функция - C++
Нужно написать рекурсивную функцию вычисления \prod |{a}_{i}| где {a}_{i} целочисленный массив {a}_{i} -четное {a}_{i}&lt;0 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
08.05.2013, 23:43 #2
ошибку приведи
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.05.2013, 23:47 #3
А sizeof( long long ) у тебя чему равен?
1
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 00:34  [ТС] #4
Рекурсивная функция

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

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

http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx
1
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 01:28  [ТС] #8
Я так понял вот тут надо было изменения сделать. Но тогда при построении ошибка
1>cl : командная строка error D8021: недопустимый числовой аргумент "/F[500000]number"
Рекурсивная функция
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
09.05.2013, 01:33 #9
Нет, ты не так пишешь. Надо: /F[пробел]размер_стека --- пробел в скобках - означает пробел! Скобки не нужны!

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

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

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

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

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

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

Добавлено через 9 минут
Меня смущает то что при каждом запуске программы, ошибка появляется при вводе совершенно разных значений. Если так и должно быть, то норм.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
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
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
09.05.2013, 12:56  [ТС] #14
Но нету рекурсии, типа использования функции в функции.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 13:04
Привет! Вот еще темы с ответами:

Рекурсивная функция - C++
Последовательность многочленов определяется рекуррентными соотношениями: Т0(x) = 1, Т1(x) = x, Тn(x) = 2хТn-1(x) – Тn-2(x) ...

рекурсивная функция - C++
Требуется разработать рекурсивную функцию, возвращающую значение для вычисления n-го члена последовательности b1=5, bn+1=bn/n2+n+1 ...

Рекурсивная функция - C++
Написать на языке С рекурсивную функцию вычисляющую количество полных расстановок скобок в произведении n чисел

Рекурсивная функция - C++
Задача


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.05.2013, 13:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru