Курсы по программированию

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

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Комбинаторика / Рекурсия. Общий делитель

  • На этом уроке мы пойдём в гости к роботу Шарпу.

    Задание:
    Решить задачу «Общий делитель».
  • Дата отправки отчёта: 12 февраля 2016 г.
  • Задание выполнено: за 30 мин.
  • Чему научился: Училась распознавать ошибки.
  • Что было сложным: Мой С# выдал ошибку
    Error CS0161 'Program.NOD(long, long)': not all code paths return a value
    и я так и не помяла какое именно значение и куда он не выдает=( пойду во сне осмысливать =)

    Но как бы сам алгоритм у меня и по мне был похож... только более размазневый=)
  • Комментарии: static int NOD (int a, int b)
            {
                if (a == b) return a;

                if (a > b)
                {
                    a = a - b;
                    return NOD(a, b);
                }
                   
              if (b >a)
                {
                    b = b - a;
                    return NOD(a, b);
                }
            }

    как понять ошибку Error CS0161 'Program.NOD(long, long)': not all code paths return a value ?
  • Оценка видео-уроку:
Отчёт от 7157 за Комбинаторика / Рекурсия. Общий делитель


Отчёт от 7157 за Комбинаторика / Рекурсия. Общий делитель




Оцени работу

 
Сохранить страницу:

459. --
Сергей Сергеевич
Сергей Сергеевич
ответить
→  muxasio  # Комбинаторика / Рекурсия. Общий делитель / 2016-02-12 02:07

Означает то что метод не возвращает значение. Возможно забыли return "что то возвращаете"


7645. --
Александр Львович
Александр Львович
ответить
→  muxasio  # Комбинаторика / Рекурсия. Общий делитель / 2016-02-12 05:38

Внутри каждого if у Вас есть оператор return. А также нужно поставить еще оператор return в самом конце, в случае, когда все условия if неверны. Компьютер не может определить, что с помощью if Вы перебрали все возможности. Я думаю, будет работать так:
static int NOD (int a, int b)
{
            if (a == b) return a;

            if (a > b)
            {
                a = a - b;
                return NOD(a, b);
            }
               
        b = b - a;
        return NOD(a, b);
}
Если одно из двух первых условий выполнится, то функция завершит работу с помощью одного из двух первых return. Если ни одно из двух первых условий не выполнится, то программа дойдет до конца, и произвойдет возврат с помощью третьего return.


7157. --
muxasio
muxasio
ответить
→  Александр Львович  # Комбинаторика / Рекурсия. Общий делитель / 2016-02-12 08:13

Spasibo bolshie za podrobnoe objasnenie;) ochen rada chto takie otzivchivie liudi;)



8886. --
Михаил Ермишин
Михаил Ермишин
ответить
→  muxasio  # Комбинаторика / Рекурсия. Общий делитель / 2016-02-12 10:17

Может случится и такое что никакое из условий не выполнится. Если одно из чисел будет NaN или INF :~)


8886. --
Михаил Ермишин
Михаил Ермишин
ответить
→  Александр Львович  # Комбинаторика / Рекурсия. Общий делитель / 2016-02-12 10:41

Компьютер всё это делает, и определяет покрытие. Компилятор нормально работает с IF просто главное не забывать что всегда бываю исключения. Например int может быть NaN или INF и при ЛЮБОМ сравнении вернёт false :~)



Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Продолжаю тренироваться в рекурсии
Трудности: К сожалению, для входных данных 33333333 и 1111 робот шарп падает с таймаутом. К слову, VS2013 тоже выдаёт StackOverflow. Если есть идеи, почему так происходит, прошу указать мне на мою ошибку.
нет таковых


Научился: Никогда не находила ранее общи знаменатель подобным образом.
Трудности: Не сложно, но по времени затратно, сама разбиралась, как решить.
Хороший урок для закрепления понимания работы с рекурсией.