Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2016, 15:46   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию Избавиться от рекурсии

В чем я делаю ошибку, когда хочу избавиться от рекурсии и делать один метод?

Код

Код:
        char[] alf = Enumerable.Range(48, 123 - 48).Select(n => (char)n).ToArray();
        static string FindString;

        private void cheks(object sender)
        {
            int Count;
            for (Count = 0; Count <= 15; Count++)
            {
                chek(Count, 0, "");
            }
        }
        private void chek(int Lenght, int Position, string BaseString)
        {
                int Count = 0;
                for (Count = 0; Count < alf.Length; Count++)
                {
                    if (Position < Lenght - 1)
                    {
                        chek(Lenght, Position + 1, BaseString + alf[Count]);
                    }
                    if (BaseString + alf[Count] == FindString)
                    {
                        richTextBox1.Text = ("Опачки: " + BaseString + alf[Count]);
                        ChechThread.Abort();
                    }
                }
        }

Как я делаю, где ошибка?


Код:
        private void chek()
        {
            int Count1;
            for (Count1 = 0; Count1 <= 15; Count1++)
            {
               int Lenght = Count1;
               int  Position = 0;
               string BaseString = "";
                int Count = 0;
                for (Count = 0; Count < alf.Length; Count++)
                {
                    if (Position < Lenght - 1)
                    {
                        Position= Position + 1;
                        BaseString = BaseString + alf[Count];
                        Count = 0;
                        continue;
                    }
                    if (BaseString + alf[Count] == FindString)
                    {
                        richTextBox1.Text = ("Опачки: " + BaseString + alf[Count]);
                        ChechThread.Abort();
                    }
                }
            }
        }
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 24.09.2016, 17:29   #2
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Код:
chek(Lenght, Position + 1, BaseString + alf[Count]);
Тоесть при раскрытии вот этой вещи где то косячу
, где?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 24.09.2016, 18:33   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

аж глаза разбегаются, чей бы выбрать ответ?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 24.09.2016, 20:00   #4
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Это какая то фикня непонятная.
come-on вне форума Ответить с цитированием
Старый 25.09.2016, 11:02   #5
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

неактуально, разрулил.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 26.09.2016, 02:26   #6
Silentium.noxe
Пользователь
 
Аватар для Silentium.noxe
 
Регистрация: 22.09.2016
Сообщений: 40
По умолчанию

Ты прости, но то ли я тупой, то ли там нет рекурсии

Как думаешь??
Silentium.noxe вне форума Ответить с цитированием
Старый 26.09.2016, 02:33   #7
Silentium.noxe
Пользователь
 
Аватар для Silentium.noxe
 
Регистрация: 22.09.2016
Сообщений: 40
По умолчанию

всё увидел...

у тебя та же проблема как и у меня была

проблема в этом блоке

Код:
private void chek(int Lenght, int Position, string BaseString)
        {
                int Count = 0;
                for (Count = 0; Count < alf.Length; Count++)
                {
                    if (Position < Lenght - 1)
                    {
                        chek(Lenght, Position + 1, BaseString + alf[Count]);
                    }
                    if (BaseString + alf[Count] == FindString)
                    {
                        richTextBox1.Text = ("Опачки: " + BaseString + alf[Count]);
                        ChechThread.Abort();
                    }
                }
        }
А точнее здесь

Код:
if (Position < Lenght - 1)
                    {
                        chek(Lenght, Position + 1, BaseString + alf[Count]);
                    }
Проблема в повторном вызове одного и того же метода,
то-есть в случае выполнения условия метод Check будет снова вызван и поэтому будут выполнения дублироваться
Silentium.noxe вне форума Ответить с цитированием
Старый 26.09.2016, 23:30   #8
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Цитата:
Сообщение от a.n.o.n.i.m Посмотреть сообщение
аж глаза разбегаются, чей бы выбрать ответ?
Во-первых, если ты пишешь такое, то даже у того, кто хотел помочь, пропадает желание.
Во-вторых, желательно пояснять, что у тебя делает код. Название chek мне ни о чём не говорит, а разбираться в коде, чтобы понять его смысл, нет никакого желания.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с задачей по рекурсии: массив 1..N. с N переход на позицию N + 1 или N + 5. Определить с помощью рекурсии можно ли собрать сумму чисел K polsovatel C# (си шарп) 2 22.09.2016 02:52
рекурсии mixon-21 Помощь студентам 18 24.05.2013 13:03
рекурсии fre Паскаль, Turbo Pascal, PascalABC.NET 2 03.04.2012 09:59
Рекурсии RAMA Паскаль, Turbo Pascal, PascalABC.NET 6 18.10.2009 13:56
Рекурсии Logan Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2008 08:52