Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помощь с рекурсией в C#

coda8 Ученик (58), на голосовании 2 недели назад
 static void sumArray( int[] myArray) 
{

int sumNumbers = 0;
int value = 0;

if (sumNumbers >= myArray.Length)
{
Console.WriteLine(myArray[sumNumbers]);
return;
}
else if (sumNumbers < myArray.Length)
{
sumNumbers++;
}



if (value < myArray[sumNumbers])
{
value++;


myArray[sumNumbers] += value;
}

sumArray(myArray);
}

static void Foo(string select, int a = 0)
{
int[] myArray = { 32, 324, 12, 1, 34, 22, 45 };


if (select == "Cумма")
{
//int c = myArray.Sum();
//Console.WriteLine(c);

sumArray(myArray);
}
else if (select == "Вывод")
{

if (a >= myArray.Length)
return;

Console.WriteLine(myArray[a]);
a++;

Foo(select, a);
}



}

static void Main(string[] args)
{

Console.WriteLine("Введите что хотите сделать с массивом (Сумма || Вывод)");
string select = Console.ReadLine();

Foo(select);
}
Нужно сделать вывод суммы элементов массива с помощью рекурсии, не используя циклы. Вроде все нормально написал, но код не работает. Подскажите, что не так.
Голосование за лучший ответ
dada da Ученик (188) 1 месяц назад
 public class SumArr 
{
public void sumArray(int[] myArray)
{

int sumNumbers = 0;
int value = 0;

if (sumNumbers >= myArray.Length)
{
Console.WriteLine(myArray[sumNumbers]);
return;
}
else if (sumNumbers < myArray.Length)
{
sumNumbers++;
}



if (value < myArray[sumNumbers])
{
value++;


myArray[sumNumbers] += value;
}

sumArray(myArray);
}

public void Foo(string select, int a = 0)
{
int[] myArray = { 32, 324, 12, 1, 34, 22, 45 };


if (select == "Cумма")
{
//int c = myArray.Sum();
//Console.WriteLine(c);

sumArray(myArray);
}
else if (select == "Вывод")
{

if (a >= myArray.Length)
return;

Console.WriteLine(myArray[a]);
a++;

Foo(select, a);
}



}
}

public class Program
{
private static SumArr _sumArr = new SumArr();
static void Main(string[] args)
{

Console.WriteLine("Введите что хотите сделать с массивом (Сумма || Вывод)");
string? select = Console.ReadLine();
_sumArr.Foo(select);
}
}
Ты использовал статические методы Foo и sumArray, но они не могут быть статичными, а вообще нужно в другие классы
Jurijus Zaksas Искусственный Интеллект (445685) 1 месяц назад
Слушай, ну не твое это... Я как твои программы вижу, так вздрагиваю. Это счастье пишется в одну строку:

 static T SumAnything<T>(IList<T> a, int i) where T : INumber<T> => i < 0 ? T.Zero : a[i] + SumAnything(a, i - 1); 

static void Main(string[] args)
{
int[] myArray = { 32, 324, 12, 1, 34, 22, 45 };
Console.WriteLine(SumAnything(myArray, myArray.Length - 1));
}
coda8Ученик (58) 1 месяц назад
Спасибо, только начал поэтому и не мое :)
Похожие вопросы