Member 11383935 Ответов: 2

Нужна помощь ведьме в создании метода


Я делаю какой-то онлайн-курс, я пытаюсь выучить C # Smile | :) . Мне кажется, что я создал бесконечный цикл. Есть гепл?
 class Program
    {
        /// <summary>
        /// Calculates the sum of the integers between start and end (including start and end)
        /// [TestMethod]
        /// </summary>
        /// <param name="start">Start number</param>
        /// <param name="end">End number</param>
        /// <returns>Sum of the integers between start and end (including start and end)</returns>
        public static int Sum(int start, int end)
        {
            
            if (start >= end)
            {
                return  0;
            }
            // TODO add your code here
            else
            {
               
                return Sum(start, end);
            }
 
        }
 
        static void Main(string[] args)
        {
            int start, end;
            Console.WriteLine("ukucajte prvi broj");
            start =Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("ukucajte drugi broj");
            end = Convert.ToInt32(Console.ReadLine());
 
           
            Console.WriteLine("suma je: " + Sum(start,end));
       
            Console.Read();
        }
    }
}


Что я уже пробовал:

это ошибка:
Необработанное исключение типа ' System.StackOverflowException ' произошло в Methods.exe

Richard MacCutchan

Вы уже опубликовали это на форуме C# - пожалуйста, напишите только на одном форуме.

2 Ответов

Рейтинг:
12

Karthik_Mahalingam

попробуйте использовать простой цикл for

public static int Sum(int start, int end)
   {

       if (start >= end)
       {
           return 0;
       }
       else
       {
           int value = 0;
           for (int i = start; i <= end; i++)
               value += i;

           return value;
       }

   }


с помощью рекурсия[^]

public static int Sum(int start, int end)
    {

        if (start > end)
        {
            return 0;
        }
        else
        { 
            return  start  + Sum(start+1 , end);
        }

    }


Member 11383935

Да, это рабочее решение. Можете ли вы сделать то же самое, но без for loop?

Karthik_Mahalingam

проверьте обновленное решение.

Member 11383935

Я пытаюсь учиться, а курс все еще не добрался до петли FOR.

Member 11383935

Спасибо.

Karthik_Mahalingam

добро пожаловать

Рейтинг:
0

OriginalGriff

Ну, да...

public static int Sum(int start, int end)
{
    if (start >= end)
    {
        return  0;
    }
    // TODO add your code here
    else
    {
        return Sum(start, end);
    }
}

Если вы называете сумму с началом меньше конца:
Sum(1, 2);
Затем он посмотрит на эти две величины и увидит, какая из них больше.
Это end, так что if тест провалится, и он выполнит else пункт... который передает те же значения методу Sum, так что он делает то же самое снова и снова, пока не закончится пространство стека и не произойдет сбой!
Вероятно, то, что вы хотели сделать, было
return start + Sum(start + 1, end);
Но, честно говоря, рекурсивный метод для этого немного перебор! :смеяться:
Почему бы не попробовать это с помощью простого for петля?