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

Почему возникает переполнение стека??? - C++

Восстановить пароль Регистрация
 
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 18:00     Почему возникает переполнение стека??? #1
У меня есть программа которая выводит все возможные перестановки заданного слова(числа) в данном случае числа 123, но почему то возникает переполнение стека. Помогите разобраться.

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include "stdio.h"
#include "conio.h"
#include "cstring.h"
#include "string.h"
#include "iostream.h"
#include "windows.h"
//---------------------------------------------------------------------------
 
 
 
#pragma argsused
 
int Perest(string C, string S);
int main(int argc, char* argv[])
{
 string s="123",s1="";
 Perest(s1,s);
 getch();
 return(0);
}
//---------------------------------------------------------------------------
 
int Perest(string C, string S)
{
        string Temp, Temp2, Cons, Res;
        int Sch;
        int i,len,len1;
        len=S.length();
        if (len==0)
                {
                        Res=C+S;
                        Sch+=1;
                        printf("%s ",Res);
                }
        else
           for(i=1; i<len;i++)
                {
                        Temp=S;
                        Temp2=Temp.substr(i,1);
                        Cons=C+S[i];
                        Perest(Cons,Temp);
                }
 
 
        return(Sch);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1585 / 1062 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
22.03.2010, 18:01     Почему возникает переполнение стека??? #2
зацикливается в рекурсии
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 18:04  [ТС]     Почему возникает переполнение стека??? #3
Цитата Сообщение от oxotnik Посмотреть сообщение
зацикливается в рекурсии
Ну это ясное дело....что убрать или что добавить чтобы работало?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
22.03.2010, 18:08     Почему возникает переполнение стека??? #4
Как то не пом не в рекурсию ещё и цикл:
А для решения: поставь return 0; где нибудь до рекурсивного вызова.
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 18:30  [ТС]     Почему возникает переполнение стека??? #5
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Как то не пом не в рекурсию ещё и цикл:
А для решения: поставь return 0; где нибудь до рекурсивного вызова.
а где именно поподробнее можно?

Добавлено через 11 минут
Ахахахах. Только что хотел откомпилировать сообщение...хДДДД жму F9 по привычке, думаю что не отправляется хДДД Кстати не подскажите есть ли аналог процедуре Delete на подобие в С++?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
22.03.2010, 18:32     Почему возникает переполнение стека??? #6
C++
1
2
3
i
nt * a =(int*)malloc(sizeof(int));       //аналог new
free(a);                                         //аналог delete
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 18:57  [ТС]     Почему возникает переполнение стека??? #7
Цитата Сообщение от Genius Ignat Посмотреть сообщение
C++
1
2
3
i
nt * a =(int*)malloc(sizeof(int));       //аналог new
free(a);                                         //аналог delete
Вообщето я имел ввиду процедуру Delete(выделения подстроки из строки) а не dispose(которая удвляет динамическую переменную)!
MrAndrey_ka
 Аватар для MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
22.03.2010, 19:01     Почему возникает переполнение стека??? #8
прокоментируй в функции каждую строчку:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int Perest(string C, string S)
{
        string Temp, Temp2, Cons, Res;
        int Sch;
        int i,len,len1;
        len=S.length();
        if (len==0)
                {
                        Res=C+S;
                        Sch+=1;
                        printf("%s ",Res);
                }
        else
           for(i=1; i<len;i++)
                {
                        Temp=S;
                        Temp2=Temp.substr(i,1);
                        Cons=C+S[i];
                        Perest(Cons,Temp);
                }
 
 
        return(Sch);
я думаю что сам поймешь почему! ну а не поймешь я потом подскажу!
жду функцию с каментами
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2010, 19:27     Почему возникает переполнение стека???
Еще ссылки по теме:

Переполнение стека C++
C++ Переполнение стека
Реализовать переполнение стека C++
Как можно сделать переполнение стека C++
C++ Переполнение стека

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

Или воспользуйтесь поиском по форуму:
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 19:27  [ТС]     Почему возникает переполнение стека??? #9
Разобрался ехуууууу вот если кому нужен полностью рабочая программа. Выводит все возможные перестановки чисел(букв) и возвращает их количество.

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include "stdio.h"
#include "conio.h"
#include "cstring.h"
#include "string.h"
#include "iostream.h"
#include "windows.h"
//---------------------------------------------------------------------------
 
 
 
#pragma argsused
 
int Perest(string C, string S);
int main(int argc, char* argv[])
{
 string s="123",s1="";
 Perest(s1,s);
 getch();
 return(0);
}
//---------------------------------------------------------------------------
 
int Perest(string C, string S)
{
        string Temp, Temp2, Temp3, Cons, Res;
        int Sch;
        char buf;
        int i,len,len1;
        len=S.length();
        if (len==0)
                {
                        Res=C+S;
                        Sch+=1;
                        std::cout<<Res<<endl;
                        return 0;
                }
        else
           for(i=0; i<len;i++)
                {
                        Temp=S;
                        Temp2=S;
                        Temp3=Temp.substr(0,i);
                        Temp3=Temp3+Temp2.substr(i+1,Temp2.length());
                        Cons=C+S[i];
                        Perest(Cons,Temp3);
 
                }
 
 
        return(Sch);
}
 
 
Ла ла ла
Добавлено через 1 минуту
Теперь я обожаю Сииииииииииииииииии)))) хДД
Yandex
Объявления
22.03.2010, 19:27     Почему возникает переполнение стека???
Ответ Создать тему
Опции темы

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