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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2020, 21:09   #1
4m63r
Новичок
Джуниор
 
Регистрация: 03.12.2020
Сообщений: 2
По умолчанию Не понимаю рекурсию

Здравствуйте!
Пытаюсь постичь азы языка самостоятельно по видео-урокам.
Застряла на теме рекурсии.
Было дано задание:
Вывести в консоль элементы одномерного массива при помощи рекурсии.
Вроде ничего сложного, написала вот такой метод:
Код:
static void ShowArray(int [] Array, int i = 0)
        {
            if (i < Array.Length)
            Console.WriteLine(Array[i]);
            ShowArray(Array, i+1);
        }
Во многом писала с опорой разбор урока.
Т к при самодеятельности получала ошибки.
Вопросы в следующем:
1. Почему нужно указывать именно i +1, а не i++? (при i++ рекурсивно выводится только первый элемент массива)
2. Почему после успешного выполнения кода все равно пишется StackOverflowException?

Также была бы рада, если бы Вы порекомендовали ресурсы/литературу, где понятно будет описана работа рекурсии.
И, если накините простеньких заданий по типу вышепредставленного, буду очень благодарна.
4m63r вне форума Ответить с цитированием
Старый 03.12.2020, 21:29   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

1. Потому что i++ это постинкремент. Поэтому аргумент функции получит старое значение i.
2. Потому что вы не предусмотрели условие выхода из рекурсии, а просто перестали печатать значения массива, как только превысили длину. Возьмите в фигурные скобки и WriteLine и ShowArray.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.12.2020, 21:30   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
1. Почему нужно указывать именно i +1, а не i++?
i++ это
ShowArray(array, i);
и потом
i = i+1; // i++

P.S. не знаю есть ли в С#
ShowArray(array, ++i ); // сначала добавить потом вызвать


Цитата:
2. Почему после успешного выполнения кода все равно пишется StackOverflowException?
Код:
    ShowArray(Array, i+1);
находится вне условия и на самом деле вы бесконечно вызываете себя (stackoverflow)

Код:
writeLn(array[i]); // вывести указанный
if i< len...  // если есть еще (называется это Условие выхода из рекурсии) ну или продолжения
 {
     i =i+1 // продвинуться (здесь ДО вызова можно и i++
    showArray(array, i ); // И продолжить вывод
  }
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 03.12.2020, 21:35   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
P.S. не знаю есть ли в С#
есть и работает https://dotnetfiddle.net/84PZS5
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 03.12.2020, 21:43   #5
4m63r
Новичок
Джуниор
 
Регистрация: 03.12.2020
Сообщений: 2
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
...
Спасибо за подробное разъяснение! Поняла, исправила и все получилось
4m63r вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на рекурсию vital_orsha Помощь студентам 0 19.11.2015 20:44
Задача на рекурсию С++ Ramina Помощь студентам 0 05.06.2012 12:33
4 Задачи на рекурсию Toni Milano Помощь студентам 2 27.12.2011 19:02
Задача на рекурсию Rusl92 Помощь студентам 1 13.01.2011 22:36
Задача на рекурсию. KoHgpaT Паскаль, Turbo Pascal, PascalABC.NET 4 22.12.2006 20:49