Тёмный
No video :(

Сумма элементов массива РЕКУРСИЯ C# | СИ ШАРП ДОМАШНИЕ ЗАДАНИЯ # 16 

#SimpleCode
Подписаться 369 тыс.
Просмотров 47 тыс.
50% 1

В этом уроке мы разберём домашнее задание на тему рекурсии, продолжим изучении рекурсии на практике и с помощью рекурсивного вызова метода, найдём сумму элементов массива.
➡️ Мой курс C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ на Udemy
👉 www.udemy.com/...
✅ ИСХОДНЫЙ КОД bit.ly/33Epz2a
🔹 Telegram канал t.me/SergeySim...
🔹 Наша группа ВК smplcode
✅ Доступ к исходному коду и спонсорство / simplecode
✅ donatepay.ru/d...
✅ BTC кошелек: 12oYfJnvt76wjJbpvfhM41m6KPz6uz4LD4
🔹Рекомендую посмотреть
✅ ЧТО ТАКОЕ РЕКУРСИЯ C# | ПЕРЕПОЛНЕНИЕ СТЕКА | СТЕК ВЫЗОВОВ | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 49 bit.ly/33KwY00
✅ Стек как структура данных. Полное понимание! Динамические структуры данных #4
bit.ly/2CoRWX0
✅ Функции и стек. Стек алгоритм. Стек что это. Стек рекурсии. Стек c++. Стек рекурсивных вызовов bit.ly/3ho7GIj
✅ ССЫЛОЧНЫЕ И ЗНАЧИМЫЕ ТИПЫ C# | СТЕК И КУЧА C# | REFERENCE AND VALUE TYPES C# | C# Уроки | # 38 bit.ly/3eL4K77
✅ ПЛЕЙЛИСТ Структуры Данных bit.ly/3eMkqqG
#сишарп #simplecode #урокипрограммирования

Опубликовано:

 

23 авг 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 174   
@SimpleCodeIT
@SimpleCodeIT 4 года назад
Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =) ✅Доступ к исходному коду и спонсорство www.patreon.com/SimpleCode ✅ donatepay.ru/don/SimpleCode ✅BTC кошелек: 12oYfJnvt76wjJbpvfhM41m6KPz6uz4LD4
@Yonjuko_Furtilab
@Yonjuko_Furtilab 4 года назад
Лайк не глядя! Я учусь c++ по вашим урокам. В роликах при выводе текста в консоль код такой cout
@AndreXIII
@AndreXIII 4 года назад
​@@Yonjuko_Furtilab std это пространство имён. Для его использования нужно либо напрямую указывать для каждой функции/переменной или использовать using namespace std; глобально (после инклюдов) или в той части кода, где часто приходится использовать.
@Yonjuko_Furtilab
@Yonjuko_Furtilab 4 года назад
@@AndreXIII благодарю
@moneyknowledge1892
@moneyknowledge1892 4 года назад
@@Yonjuko_Furtilab Привет а вы подключили пространстов имен std. Чтобы ошибки не было перед int main() пишите using namespace std;
@Yonjuko_Furtilab
@Yonjuko_Furtilab 4 года назад
@@moneyknowledge1892 понял
@user-je1wl9dm5x
@user-je1wl9dm5x 4 года назад
Закручено))) но это круто, вроде понял суть. Я по другому сделал, по аналогии с циклами, необязательным параметром передовал еще и сумму)
@andruhaofficial
@andruhaofficial 3 года назад
Я тоже так сделал)
@ShomLZ
@ShomLZ 3 года назад
Так же получилось, хотя пытался сделать только с одним необязательным параметром.
@mediafile9995
@mediafile9995 3 года назад
Я тоже)))
@user-xd4nl6mh5q
@user-xd4nl6mh5q 2 года назад
Аналогично
@sernowodsk5963
@sernowodsk5963 2 года назад
тоже,
@dimasavukov6230
@dimasavukov6230 4 года назад
Сергей! Спасибо, огромное! Да прибудет с тобой сила...!
@alonev1875
@alonev1875 4 года назад
Сергей, вы замечательный учитель. Спокойно, грамотно, без суеты. Моя рекомендация, проведите серию видеоуроков по паттернам проектирования.
@alekseyborushko8859
@alekseyborushko8859 3 года назад
Придется после паттернов донатить)
@-LGK
@-LGK 3 года назад
Тоже писал об этом
@ooDEFENDERoo
@ooDEFENDERoo 4 года назад
Большое спасибо за такие подробные и понятные уроки!
@user-lx5vv3uu8u
@user-lx5vv3uu8u 4 года назад
Сергей, спасибо огромедное за очередной шедевр!!!
@eizeed7973
@eizeed7973 Год назад
На самом деле если ставить модификатор воид, то это задание становится очень простым. Думаю основной задачей было сделать так, чтобы после этого метод возвращал сумму этих чисел. С войдом я сделал его за минуты 3-4, а с интом минут 20-30
@ConcriticalDavid
@ConcriticalDavid 8 месяцев назад
Тогда зачем с интом его делать?
@user-kp4rv2mr7f
@user-kp4rv2mr7f 6 месяцев назад
я @AnmlsMoment Я тоже не понял зачем там ИНТ, так как ВОЙД прям легко решился. Когда начал смотреть решение, даже немного напрягся. Но с образовательной точки зрения делать через инт наверное полезно) Я вот так решил я вот так решил static void Foo(int[] Array, int i = 0, int Sum = 0) // доп необяз аргумент { if (i < Array.Length) // меньше потому что передаем длину массива, а не число и ексепшены исключены Foo(Array, i+1, Sum += Array[i]); //засунул все действия метода в аргументы рекурсии и сработало else Console.WriteLine(Sum); //вывод внутри функции и завершение без ретурна, так как войд. }
@santei9506
@santei9506 4 месяца назад
@@user-kp4rv2mr7f тоже решал с войдом, но как я понял смысл в том, чтобы метод выдавал значение, которое можно присвоить переменной в мэйне. Например как в видео int result = Sum (myArray). С войдом такая запись выдаст ошибку. Хотя до конца усвоить, как работает такое решение тяжело для меня
@adamadamesko9759
@adamadamesko9759 4 года назад
Классный урок, впрочем как всегда.
@_chill_relax_calm4647
@_chill_relax_calm4647 3 года назад
Поддерживающий комментарий для дальнейшего развития канала. Вы чрезвычайно понятно все объясняете
@martincimonyan9645
@martincimonyan9645 2 года назад
Я лично реализовал таким способом : int WriteArray(int[] array, int index = 0) { if (index >= array.Length) return 0 ; return array[index] + WriteArray(array, ++index); }
@yriktop5756
@yriktop5756 4 года назад
Топ! Уже заждался! ,спасибо вам Сергей!!!!
@internettodo4677
@internettodo4677 2 года назад
Потрясающий кладезь информации по C#: структурные знания без воды, с повторениями пройденного и домашними заданиями, приятно слушать и смотреть - высший класс! Спасибо и моя огромнейшая просьба - продолжайте снабжать своими уроками ютубчик. Само собой, можно найти много всего и в бурже на сей счет - кто бы спорил? Но в переводе процесс обучения ловчее, ничего не остается за гранью понимания. Я уверен, у Вас талант к преподаванию.
@user-kz4xm7zk5c
@user-kz4xm7zk5c 4 года назад
Благодарю, Сергей!
@name5915
@name5915 8 месяцев назад
Элегантно и чётко! Столкнулся с тем, что при выходе из стака терял все элементы массива. Не хватало именно такого решения по всей видимости. Поэтому искал другое решение и как результат сделал сложение не по выходу, а как смог (массив рандомный): static int ArraySum (int[] Array, int sum=0, int i = 0 ) { if (i < Array.Length) { return ArraySum(Array, sum += Array[i], i + 1); } else return sum; } Random random = new Random(); int[] Array = new int[25]; for (int i = 0; i < Array.Length; i++) { Array[i] = random.Next(10); } int sum = ArraySum(Array); Console.WriteLine(sum + " - сумма элементов массива рекурсией"); Console.ReadLine(); за обратную связь спасибо)
@olegostr9505
@olegostr9505 2 года назад
Огромное спасибо за уроки, невероятный труд! Я сделал не много по другому, я передал сумму 0 по ссылке, а внутри метода передавал текущее значение, тогда не было необходимости делать Return
@user-xy5qu1zp4l
@user-xy5qu1zp4l 4 года назад
Спасибо! Нет не так, ОГРОМНЕЙШОЕ СПАСИБО!!!
@matricaria24
@matricaria24 3 года назад
Так много вариантов выполнения, что аж захотелось свой вариант прислать) static void SumElements(in int[] array, int result=0, int i=0) { if (i >= array.Length) Console.WriteLine("Результат суммирования {0} элементов = {1}",array.Length ,result); else { result += array[i]; i++; SumElements(array, result, i); } }
@777ProRoblox77
@777ProRoblox77 2 года назад
а я сумму передал методу с модификатором ref
@777ProRoblox77
@777ProRoblox77 2 года назад
static void SumArr(int[] arr, ref int sum, int count = 0) { sum += arr[count]; if (arr[arr.Length - 1] == arr[count]) { return; } SumArr(arr, ref sum, count+1); }
@3x__
@3x__ 4 года назад
Спасибо за урок!
@vladivchenko873
@vladivchenko873 4 года назад
Здравствуйте Сергей! Если вам интересно то сделайте пожалуйста видео о том как собрать ПК для программирования! Если вас заинтересовала эта идея, то попытайся ответить на вопросы на подобие: • Какие компоненты самые важные для такого рода сборки? • К чему стремиться при создании ПК для программирования? • Меняется ли сборка если программист находится в другой сфере программирования? • Какой монитор подобрать? • Сколько мониторов оптимально подобрать? • Какое кресло выбрать? • И т.д. Думаю многим зайдёт!
@pulsar1934
@pulsar1934 2 года назад
Хахахахахха)))))))))))))
@inquisitor8362
@inquisitor8362 4 года назад
Уроки по с++ были хорошие. Перешел с плюсов на шарп, за два дня прошел все видео по шарпу. Лайк
@KosmosProduction8388
@KosmosProduction8388 Год назад
и как? стал программистом?
@jiozitivchik_play3204
@jiozitivchik_play3204 Год назад
@@KosmosProduction8388 Конечно, 2 года прошло.
@KosmosProduction8388
@KosmosProduction8388 Год назад
@@jiozitivchik_play3204 ты не понял суть моего комментария
@jiozitivchik_play3204
@jiozitivchik_play3204 Год назад
@@KosmosProduction8388 Я то понял, просто ответил неявным сарказмом.
@eugenev423
@eugenev423 Год назад
Thankful
@alinanur5628
@alinanur5628 3 года назад
ГЕНИАЛЬНО!!!
@artefakt4349
@artefakt4349 3 года назад
Больше! Больше ДЗ! И.... Спасибо огромное! (после просмотра видео) Оу... как сложно, но интересно! Я чет даже не знаю с какой стороны к третьему подойти. Ну а пока немного поправил, как в предыдущем дз. static void fill_arr(in int[]Arr,int i=0) { if (i
@yury7100
@yury7100 3 года назад
а зачем in использовать здесь?
@silverblade7777
@silverblade7777 3 года назад
Классный урок, вычисление при обратном шаге) 2 in 1 static void SumArray(in int[] array, in int count = 0, in int sum = 0) { if (count < array.Length) { Console.WriteLine(array[count]); SumArray(array, count + 1, array[count] + sum); } else Console.WriteLine(" Итоговая сумма: " + sum); }
@egorkalmykov4003
@egorkalmykov4003 3 года назад
Спасибо !!!
@user-je1wl9dm5x
@user-je1wl9dm5x 4 года назад
Сергей, ждем 3ю часть дз! :)
@MinRide
@MinRide 3 года назад
Спасибо за такие видео, Сергей!
@AlexandrSavchenko
@AlexandrSavchenko 3 года назад
static int SumV2(int[] array, int i = 0) { if (i < array.Length) { return array[i] + SumV2(array, i + 1); } return 0; }
@HeIvis
@HeIvis 2 года назад
Мой вариант) static int Recursion(int[] array, int count = 0) { if (count == array.Length - 1) return array[count]; return array[count] + Recursion(array, ++count); }
@artemky3bmu45
@artemky3bmu45 11 месяцев назад
Спасибо!!
@elfinroom1178
@elfinroom1178 3 года назад
спасибо за грамотный разбор
@leskhanmuratuly5374
@leskhanmuratuly5374 3 года назад
Спасибо))
@KlevaGameS
@KlevaGameS 10 месяцев назад
Благодарю за урок.
@user-sp6nv4ds5v
@user-sp6nv4ds5v 3 года назад
Спасибо
@user-gh2ml3cf5o
@user-gh2ml3cf5o 2 года назад
👍👍👍
@7tifivi146
@7tifivi146 3 года назад
Хороший код домашнего задания, заодно и прошлые темы напомнил. Лучший.
@nata4518
@nata4518 Год назад
Если что, я немец: static void Met(int[ ] Array, int index = 0, int Summ = 0) { if(index == Array.Length) Console.WriteLine(Summ); if(index < Array.Length) { Summ += Array[index]; Met(Array, index + 1, Summ) }
@pulsar1934
@pulsar1934 2 года назад
Интересный способ решения задачи) Правда как для новичка кажется замудрённым. А вот что вышло у меня: static int Sum(ref int[] array, int i = 0, int result = 0) { if (i > array.Length - 1) return result; else { result += array[i]; i++; } return Sum(ref array, i, result); }
@DrimingPlays
@DrimingPlays 2 года назад
Так это не рекурсия, а метод REF
@maximkapec9073
@maximkapec9073 Год назад
можно еще проще, но в условии было определенно про Рекурсию
@sergeikap7211
@sergeikap7211 3 года назад
Именно так, я рекурсия понял. Спасибо:)
@user-mc7kc2bd8b
@user-mc7kc2bd8b 3 года назад
Спасибо!
@MihailSofianou
@MihailSofianou 4 года назад
СПАСИБООО
@bayfong8087
@bayfong8087 10 месяцев назад
У меня мозг просто взрывался, до тех пор, пока я не вспомнил про пистолеты в патроне...
@BuFFerS103
@BuFFerS103 4 года назад
У меня иначе получилось! Можно ли считать такое выполнение корректным? static void ArrayOutput(int[] array, int i, int sumStore) { if (i < array.Length) { sumStore += array[i]; i++; ArrayOutput(array, i, sumStore); } else { Console.WriteLine($"Сумма элементов массива: {sumStore}"); return; } }
@gamefup4853
@gamefup4853 3 года назад
Ну ответ ты получишь, но вот вся суть того что ты возвращаешь метод и стека пропадает. Лично я лажанул в этом, но думаю ты уже и так все знаешь)
@dev_anim3
@dev_anim3 3 года назад
Можно написать намного более удобно и понятно :)
@nostation9424
@nostation9424 2 года назад
Бро у меня один в один так же, только инкремент сразу в скобках вызова метода ставил типо не i++ , а Sum(array, result, i + 1). Только не пойму почему это не корректный вариант. Код ведь работает. Вызов метода в самом условии перебора, на мой взгляд логично. Мб я не прав, объяснит кто нибудь? Не догоняю.
@user-kr3ku6ys3e
@user-kr3ku6ys3e 2 года назад
@@nostation9424 аналогично. У каждого свой почерк. Так по-моему даже понятней, чем на видосе. Это корректно, не парься. Каждую задачу можно сделать по разному.
@user-zn2hj7cu9z
@user-zn2hj7cu9z 2 года назад
internal class Program { static void Sum(int []arr, int i =0, int result =0) { if (i
@user-gh2ml3cf5o
@user-gh2ml3cf5o 2 года назад
работает?
@molchanov823
@molchanov823 3 года назад
static int Sum (ref int res, ref int [] Array, int i=0) { if (i < Array.Length) { res += Array[i]; Sum(ref res, ref Array, i + 1); } return (res); }
@неуравновешеный
@неуравновешеный 2 года назад
Гениально
@user-mq1gl3ye7i
@user-mq1gl3ye7i 26 дней назад
Я сделал другим способом class Program { static void ArraySum(int[] Array,ref int sum ,int i = 0) { if (i < Array.Length) { sum += Array[i]; ArraySum(Array, ref sum , i + 1); } } static void Main(string[] args) { int[] MyArray = { 5,10,2 }; int Sum=0; ArraySum(MyArray,ref Sum); Console.WriteLine(Sum); } }
@hey4nm
@hey4nm 4 года назад
Пока ждал урока, начал читать head first
@hey4nm
@hey4nm 4 года назад
Но конечно, всё равно спасибо
@user-lx5vv3uu8u
@user-lx5vv3uu8u 4 года назад
Классная серия!!!
@hey4nm
@hey4nm 4 года назад
Но это всё же, наверно, лучшее из того что я видел
@user-sq4ff4zp9b
@user-sq4ff4zp9b 2 года назад
Спасибо за урок! Лайк)))
@user-sq4ff4zp9b
@user-sq4ff4zp9b 2 года назад
Я решил немного по-другому) static void SumArray(int[] arr, int sum = 0, int i = 0) { sum += arr[i]; if (i < arr.Length) SumArray(arr, sum: sum, i + 1); else Console.WriteLine(" " + sum); }
@user-sq4ff4zp9b
@user-sq4ff4zp9b 2 года назад
Но у меня только вывод на консоль, и это минус( эта домашка была сложной... я пытался вывести int, но у меня не вышло
@ifelru
@ifelru 3 года назад
Воу, очень классное решение! Спасибо.
@MP-pc9bo
@MP-pc9bo 3 года назад
У меня получился странный велосипед. Но он работает, так что думаю задание выполнено. static int SumArr(int[] Arr) { if (Arr.Length > 1) return Arr[0] + SumArr(Arr[1..]); else return Arr[0]; }
@billdriver3960
@billdriver3960 3 года назад
Прикольно) Но в метод передаётся диапазон как новый массив для которого отдельно выделяется память, а не ссылка на уже существующий массив, таким образом программа использует значительно больше памяти
@MrDick0012
@MrDick0012 4 года назад
Никто не сталкивался с проблемой, если поставить точку остановы то красный кружок не появляется(не отображается), хотя в отладке все работает?
@user-ud6rn1bc1p
@user-ud6rn1bc1p Год назад
Сделал вариант с именованными параметрами, но не с возвратом значения в метод Main, а с выводом на консоль прямо из метода SumArray( ): // Сложение элементов с помощью рекурсии internal class Program { static void SumArray(int[] array, int x = 0, int i = 0) { if (i >= array.Length) { Console.WriteLine(x); return; } x += array[i]; SumArray(array, x, i + 1); } static void Main(string[] args) { int[] array = { 10, 2, 6, 7, 23}; SumArray(array); Console.ReadLine(); } }
@ivannebyshynets8829
@ivannebyshynets8829 3 года назад
я вообще не так добился результата)))
@user-gx9yl1lg5w
@user-gx9yl1lg5w 5 месяцев назад
public static int SumArray(int[] IArray, int iter = 0) => iter >= IArray.Length ? 0 : IArray[iter] + SumArray(IArray, iter + 1);
@jvachka11
@jvachka11 3 года назад
Чем короче код тем лучше? У меня получилось выполнить ДЗ, только чуть по другому и кода в 3 раза больше =)
@user-rm7uc1bn5b
@user-rm7uc1bn5b 3 месяца назад
Хоть убей, но я так и не понял как складываются значения элементов массива.) Переменная resault до самого конца ровняется 0. И только на этапе освобождения стека появляется верное значение. И маневр с индексом i + 1, в место инкремента. И возможность в параметрах вызова метода что-то прибавлять. В общем какие-то уроки отлично проходятся и даже получаются ДЗ выполнить. А какие-то, как этот как будто вырваны из контекста.
@JOnatanKERtis
@JOnatanKERtis Год назад
Я писал что-то вроде: if (index < Array.Length) { resoult = resoult + Array[index]; summ_mass(Array, index+1); } return resoult; И при выходи со стека у меня оставалось только первое число. Я понимал почему. Но никак не мог понять как избавится от "рекола", а тут оказывается им надо было воспользоваться (=_= ) хитро.
@selfdeveloper2688
@selfdeveloper2688 2 года назад
Я сделал через вывод суммы на консоль, потому что return я еще не так хорошо проработал и есть неуверенность, и переделывать не хочется)
@pulsar1934
@pulsar1934 2 года назад
По сути return это фасовщик результатов функции, её конечный оператор. Упаковал результат функции и отдал дальше на конвейер кода. Такие функции как void не указывают на конкретный результат, что она может отдать, поэтому и return не знает каких размеров и форматов брать упаковку и по итогу отдаёт ничего. А вот например если int, float, string и т.д то return может паковать всё это, ибо знает что производит конвейер и что ему нужно передать и во что упаковать продукт. Пример: static void NameFunс() { return; } или static int NameFunс() { int i = 0; return i; }
@user-zd7jh8wf9b
@user-zd7jh8wf9b 3 года назад
это пиздец..... спасибо за объяснение!
@user-od8mn6ns2z
@user-od8mn6ns2z 2 года назад
С дз справился , код , как обычно , более избыточный чем у вас (опять не учёл память стека , и что ее нужно не захламлять 0.0)
@user-nw8sn5gf9e
@user-nw8sn5gf9e 2 года назад
ШОК контент
@user-ym1kn2ms5v
@user-ym1kn2ms5v 2 года назад
static int sum_elements(in int[] array, int i = 0) { return i == array.Length ? 0 : array[i] += sum_elements(array, ++i); }
@user-ge5ti1cd8d
@user-ge5ti1cd8d Год назад
Так нельзя делать, поскольку у вас в выражении "+=" присутствует одновременно переменная i и ее увеличение. Порядок вычисления операндов выражения в этом случае не определен, то есть вполне возможно, что вначале выполнится sum_elements(array, ++i), а потом array[i] += ..., а это совсем не то, что вы хотели. Надо использовать return i == array.Length ? 0 : array[i] + sum_elements(array, i + 1); Обратите внимание, что у вас еще ошибка - вы вместо операции + использовали операцию +=, тем самым вы испортили исходный массив array
@Andrew-pd2ci
@Andrew-pd2ci 4 года назад
здравствуйте, огромное спасибо за уроки!!! А будет ли в будущем рассматриваться ООП
@Petrov521
@Petrov521 3 года назад
сделал так: static void sumarray(int [] myarray, int i = 0, int sum = 0) { if (i < myarray.Length) { sum = sum + myarray[i]; sumarray(myarray, i + 1, sum); } if (i == myarray.Length-1) { Console.WriteLine(sum); } } static void Main(string[] args) { int[] myarray; myarray = new int[5] { 1, 2, 3, 4, 5 }; sumarray(myarray); }
@Estarossa_Miloserdia
@Estarossa_Miloserdia 2 года назад
static void Foo(int[] array, int i =0, int result = 0) { if(i < array.Length) { result += array[i]; Foo(array, i+1, result); } if(array.Length ==i) Console.WriteLine(result); } static void Main(string[] args) { int[] array = {1,2,3,4,5}; Foo(array); Console.ReadLine(); }
@user-wj7xl1cu3x
@user-wj7xl1cu3x 3 года назад
Не сразу додумался как вывести сумму. Но потом сделал так: if (i == 0) { Console.Write(result); } return result;
@sernowodsk5963
@sernowodsk5963 2 года назад
вот мои варианты static void SumM(int[] array, int i = 0, int Sum = 0) { if (i >= array.Length) { Console.WriteLine("Сумма массива "+Sum); return; } Console.WriteLine(array[i]); Sum += array[i]; i++; SumM(array, i, Sum); } static void SumArray(int[] array, int i = 0, int Sum = 0) { if (i < array.Length) { Console.WriteLine(array[i]); SumArray(array, i + 1, Sum += array[i]); return; } Console.WriteLine("Сумма массива " + Sum); }
@ganyu3439
@ganyu3439 Год назад
SerGey😀
@nostation9424
@nostation9424 2 года назад
Подскажите пожалуйста а почему условие if здесь влияет на прекращение вызова метода. if нам же просто 0 возвращает. А вызов метода даже не в поле видимости if. Не могу понять, почему метод перестает вызываться. Я совсем зеленый еще
@jizzervirusreptikonski8756
@jizzervirusreptikonski8756 4 года назад
У вас будут уроки про С# ООП?
@SimpleCodeIT
@SimpleCodeIT 4 года назад
будут
@HATAHKE762
@HATAHKE762 4 года назад
Я немного по-другому сделал static int SumArray(int[] vs, int i = 0) { if (i < vs.Length) { return vs[i] + SumArray(vs, i + 1); } return 0; } ПыСы До конца досмотрел, оказывается так же сделал. ))
@user-fy3ob1cl1r
@user-fy3ob1cl1r 2 года назад
Сделал быстро как и 1е задание ток немного не так,как у автора. дз 1 if (i
@user-jq8jm9xz2k
@user-jq8jm9xz2k 3 года назад
Я это реализовал немного по другому: using System; namespace Lesson { class Program { static int GetSumArr(int[] arr, int i = 0) { int result = 0; if (i < arr.Length) { result += arr[i]; return result + GetSumArr(arr,++i); } else { return 0; } } static void Main(string[] args) { int[] arr = { 5,3,2 }; Console.WriteLine(GetSumArr(arr)); } } }
@neo3248
@neo3248 4 года назад
Привет,хотел бы выбрать первый высокоуровневый язык программирования сложность не волнует,что выбрать между Rust и C++, про Rust многие хорошо отзываются,и говорят что MIcrosoft Хочет поменять C++ на Rust,какой бы ЯП порекомендовал бы ты для изучения?
@yaroslavprotskiv2320
@yaroslavprotskiv2320 3 года назад
Мой вариант static int SumElArray(int [] myArray, int Position = 0, int Result = 0) { if (Position < myArray.Length) { Result += myArray[Position]; Position++; return SumElArray(myArray, Position, Result); } return Result; } static void Main(string[] args) { int[] myArray = {81,64,49,36,25,16,9,4}; int Sum = SumElArray(myArray); Console.WriteLine(Sum); } Вариант Сергея поинтерестней и трудней для меня. Мне пришлось приобразить для себя: static int Sum(int[] myArray, int i = 0) { if (i >= myArray.Length) { return 7; } else { int result = Sum(myArray, i+1); int x = myArray[i]; int y = result; return x+y; } }
@evilgamer2503
@evilgamer2503 Год назад
И делал всё через войд
@sergenuaglu9690
@sergenuaglu9690 3 года назад
Одного не могу понять: почему в условии if у вас i >=. В каком случае переменная i может быть больше длины массива? Мы же двигаемся последовательно от i=0 и как только i выравнивается с длиной начинается выход из рекурсии.
@billdriver3960
@billdriver3960 3 года назад
В случае, если по каким-то причинам при изначальном вызове метода в параметр i будет передано значение, которое больше длинны массива
@sergenuaglu9690
@sergenuaglu9690 3 года назад
@@billdriver3960 ну точно, я и не подумал об этом:)
@amigo75833
@amigo75833 Год назад
static int Sum(int[] arr, int i = 0, int _sum = 0) { if (i >= arr.Length) return _sum; _sum += arr[i]; i++; return Sum(arr, i, _sum); }
@mrdgnf
@mrdgnf 2 года назад
class Program class Program { static int SumMas(in int[] array, int i = 0) { if (i >= array.Length) return 0; int sum = SumMas(array, i + 1); return array[i] + sum; } static void Main(String[] args) { int[] array = { 1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4 }; int sum = SumMas(array); Console.WriteLine(sum); } }
@user-hn3dl3cb2x
@user-hn3dl3cb2x Год назад
я робив трішки по іншому. я вносив париметр sum і дописував до нього ключове слово ref, робив перевірку чи довжина масиву більша чи дорівнює чим довжина масиву index, якщо так то припинялася робота рекурсії.
@nostation9424
@nostation9424 2 года назад
А вот не совсем понятно почему if здесь является условием выхода из рекурсии. Ведь вызов метода даже не в его области видимости. Не догоняю что то, мб кто подскажет?
@user-nh1lp8xt4j
@user-nh1lp8xt4j 2 года назад
А я так сделал )) static void ArraySum(int[] array, int count = 0, int sum = 0) { if (count < array.Length) { sum += array[count]; count++; ArraySum(array, count, sum); if (count == array.Length) { Console.WriteLine(sum); } } }
@user-gh2ml3cf5o
@user-gh2ml3cf5o 2 года назад
у вас здесь не обнуляется count каждый раз при вызове метода?
@user-nh1lp8xt4j
@user-nh1lp8xt4j 2 года назад
@@user-gh2ml3cf5o При первичном вызове он равен 0 как и сумма. Но это рекурсивный вызов метода, внутри метода ему не нужно обнуляться. А вот если вызывать его а Main() то count и sum всегда равны 0 изначально. Пройдите дебагом пошагово, чтобы понять как он работает.
@steshapokosova1775
@steshapokosova1775 3 года назад
А вот так у меня, уложила всю логику в три строчки кода, все работает но голова кругом от реализации =) static int SumArray(ref int[] Array, int SIZE) { if (SIZE == 0) return 0; return Array[SIZE-1] + SumArray(ref Array, SIZE-1); }
@user-vi7ts2we5t
@user-vi7ts2we5t 3 года назад
вот немножко короче :DD : static int SumArray(ref int[] Array, int SIZE) { int result = 0; return result = SIZE == 0 ? 0 : Array[SIZE - 1] + SumArray(ref Array, SIZE - 1); }
@romant2394
@romant2394 2 года назад
Дякую за урок! Удосконалив трішки попереднє завдання, і вийшла така відповідь: static void Sum(int[] ar, int sum = 0, int i = 0) { if (i < ar.Length) { sum += ar[i]; Sum(ar, sum, i + 1); if (i == ar.Length-1) { Console.WriteLine(sum); } } }
@wladd1995
@wladd1995 2 года назад
У меня так получилось static void Sum(int[] myArray, int value = 0, int result = 0) { if (value >= myArray.Length) { return; } result += myArray[value]; Console.WriteLine(result); value++; Sum(myArray, value, result); } static void Main(string[] args) { int[] myArray = { 5, 4, 8 }; Sum(myArray); Console.ReadLine(); }
@nyashuka
@nyashuka 4 года назад
А так норм? static void Foo(int[] array, int i = 0, int sum = 0) { if (array.Length > i) { Foo(array, i + 1, sum += array[i]); if (i == array.Length - 1) { Console.WriteLine(sum); } } }
@clownkrusty9950
@clownkrusty9950 2 года назад
Сделал по другому static void massiveSum(int[] massive,ref int sum, int i = 0) { if (i < massive.Length) { sum += massive[i]; massiveSum(massive, ref sum, i + 1); } } static void Main(string[] args) { int sum = 0; int[] massive = { 1, 22, 333, 4444 }; massiveSum(massive, ref sum); Console.WriteLine(sum); }
@user-hg7sm7ew8g
@user-hg7sm7ew8g Год назад
Тож самое Думал как нормально сделать и просто в парамтеры пихнул сумму элементов в параметры метода
@user-ir5ut4tq3e
@user-ir5ut4tq3e Год назад
Я бы не догадался до такого решения наверно ) Сделал по другому static void ArraySumElements(int[] anyArr, ref int result, int i = 0) { result += anyArr[i]; if (i >= anyArr.Length - 1) return; i++; ArraySumElements(anyArr, ref result, i); } Теперь мне не нравиться моё решение ХD
@ohshie
@ohshie Год назад
о у меня почти такой же) тоже грущу что сделал так "некрасиво" public static void SumArray(int[] inputArray, int cycle = 0, int sum = 0) { sum += inputArray[cycle]; cycle++; if (cycle >= inputArray.GetLength(0)) { Console.WriteLine(" "+sum); return; } SumArray(inputArray, cycle, sum); }
@assetalasha6644
@assetalasha6644 Год назад
я правильно понял? суммирование происходит с конца очереди? т.е. аналогию приведу: в 30куб (Sum) ложу мешок 25кг зерна и рядом контейнер 20куб.(Sum в Sum). в 20куб. вкладываю 15кг зерна и рядом контейнер на 10куб (Sum(10куб) в Sum(20) который в свою очередь в Sum(30)) в 10куб. ложу 40кг зерна и рядом контейнер на 3куб пустым. последовательность : пустой контейнер на 3куба выкинули(игнорим) -> 40кг с 10ти кубов пересыпаем в 20куб к 15кг (55кг) -> 55кг пересыпаем к 25кг (80кг) надеюсь я не запутался и Вас не запутал))) Надеюсь что я правильно понял
@assetalasha6644
@assetalasha6644 Год назад
кубатуре значение придаю для себя для ясности
@Fezzyr
@Fezzyr 2 года назад
Я изначально написал метод с возвратом ответа на консоль, к тому же поочерёдно:) (хотя это и не входило в мои планы:)) static void ArrayWriter(int[] array, int i = 0, int result = 0) { if (i >= array.Length) return; result = result + array[i]; Console.WriteLine(result); i++; ArrayWriter(array, i, result); }
@evilgamer2503
@evilgamer2503 Год назад
Ля а у меня код по масивнее, ну я сразу три дз делал в одном проекте по этому и три метода и более глобальные переменные
@rad9587
@rad9587 4 года назад
Можно ли куда-нибудь скинуть дз вам? То есть не ответ на дз, а само задание, которое надо будет решить. Тема: рекурсия
@sashazar1
@sashazar1 4 года назад
Привет симпл, спасибо большое за твой труд) Подскажите кто нибудь решения этой задачи на с++ "Цикл, который перебирает числа от 0 до 100 и добавляет в новый массив или объект только те, в которых есть 0 (10, 20 и тд) Это должна быть функция, в которой происходит этот процесс и она должна ретёрнить конечный массив."/ Автор може сможешь решить , сам пока не додумался как решить
@HATAHKE762
@HATAHKE762 4 года назад
Проверку по модулю 10 организуй и всё.
@sashazar1
@sashazar1 4 года назад
@@HATAHKE762 ,честно я не совсем понимаю как это, можете какой-то пример скинуть.
@HATAHKE762
@HATAHKE762 4 года назад
Проверяй каждый элемент массива деля его на 10. Если остатка нет, значит это 10*х, т.е. число в которых есть 0 (10, 20 и тд).
@HATAHKE762
@HATAHKE762 4 года назад
как пример могу показать на шарпе: static void Main() { int[] arr = { 10, 3, 15, 40, 25, 18, 90 }; for (int i = 0; i < arr.Length; i++) { if (arr[i] % 10 == 0) Console.Write("{0} ", arr[i]); } }
@sashazar1
@sashazar1 4 года назад
@@HATAHKE762 ,спасибо, так понятнее )
@gotogoalnew5707
@gotogoalnew5707 Год назад
Чем дальше я захожу тем иначе выглядит мой код нежели код в видео
@brickgaming1240
@brickgaming1240 2 года назад
Ничего не понятно(И это явно не Ваша вина), но очень интересно.
@king-gc5co
@king-gc5co 2 года назад
Слона очень сложна эта всёрам штобы празнисти слова задам на перёт
@dima8537
@dima8537 4 года назад
Почему ты до сих пор используешь .NET Framework , а не .NET Core?
@user-uy8ui1cm8h
@user-uy8ui1cm8h 2 года назад
почему return 0?
@8-----3
@8-----3 Год назад
Жесть как замудрёно. Никогда бы не догадался. Т.е, сначала мы передаём массив, создаём новую переменную в параметрах, потом мы первым условием ставим выход из рекурсии когда i наберёт все значения индексов массива MyArray в стеке, собственно потом пишем рекурсию где передаём массив и измененную переменную i дальше по накоплению стека. 0 передаём в result по окончанию рекурсии и начинаем складывать в него все индексы массива. Индексы сохранены в i и поэтапно складываются с захлопыванием очереди из стеков.
@TatyanaAndreewa
@TatyanaAndreewa Год назад
namespace ConsoleApp6 { class Program { static void PrintMas(int[] array, ref int i, ref int result) { if (i > array.Length - 1) { return; } result = result + array[i]; Console.WriteLine(result); i = i + 1; PrintMas(array, ref i, ref result); } static void Main(string[] args) { int i = 0; int result = 0; int[] myArray = { 8, 3, 5, 7 }; PrintMas(myArray, ref i, ref result); Console.ReadLine(); } } }
Далее
Understanding and implementing a Hash Table (in C)
24:54
Добро пожаловать в C++
16:08
Просмотров 460 тыс.