Nano Hash - криптовалюты, майнинг, программирование

Функция не возвращает правильное логическое значение

Осознав, что рекурсия является одним из моих слабых мест, я нашел веб-сайт, который заставляет вас рекурсивно решать простые задачи (https://codestepbystep.com/problem/view/cpp/recursion/digitsSorted?problemsetid=15)

Тот, с которым я застрял (digitsSorted, number 5), выглядит следующим образом: вы вызываете функцию, передавая число в качестве аргумента. Если цифры в этом числе отсортированы в порядке возрастания, функция возвращает True, в противном случае возвращает False. Повторяющиеся цифры разрешены. Функция также должна иметь возможность обрабатывать отрицательные числа. Одна цифра сортируется по определению.

Таким образом, func(0), func(112234) или func(-345669) возвращает True, а func(4321) возвращает False и так далее.

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

Мой код:

def digitsSorted(x):
    if x < 0:
        x = x * (-1)
        digitsSorted(x)
    elif (x/10) < 1:
        return True 
    else:
        remainder1 =  x % 10
        x = (x - remainder1) / 10
        remainder2 = x % 10
        if remainder1 >= remainder2:
            digitsSorted(x)
        else:
            return False

Когда я вызываю функцию, я получаю правильный ответ только тогда, когда аргумент представляет собой одну цифру, иначе он возвращает None. Однако я думаю, что код правильный, потому что, когда я меняю:

return True

за:

print(True)
return 

и то же самое со строкой "return False", код работает как надо. Я просто не могу понять, в чем проблема.

заранее спасибо


  • Что говорит ваш отладчик, когда вы проходите через него? 02.03.2018
  • Привет. Я программирую всего несколько недель, поэтому, боюсь, я действительно не знаю, как использовать отладчик. 02.03.2018
  • выяснение того, как использовать отладчик, имеет неоценимое значение для сложного кода и изучения того, почему происходят определенные вещи (например, отслеживание и устранение ошибок) 02.03.2018
  • Спасибо за совет. Я только что проверил отладчик Python в официальной документации и выглядит довольно пугающе! 02.03.2018

Ответы:


1

В рекурсии, когда вы «повторно вызываете» функцию, вы должны вернуть ее результат исходной функции.

Ваш код в порядке. Ему просто нужно одно небольшое изменение:

def digitsSorted(x):
    if x < 0:
        x = x * (-1)
        return digitsSorted(x)
    elif x < 10:
        return True
    else:
        remainder1 = x % 10
        x = int(x / 10)
        remainder2 = x % 10
        if remainder1 >= remainder2:
            return  digitsSorted(x)
        else:
            return False

Изменение, которое вам нужно сделать, это когда вы вызываете функцию рекурсивно: return digitsSorted(x)

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

02.03.2018
  • Это относится к любой функции, рекурсивной или нет. 02.03.2018
  • Рад, что помог. Возможно, вы захотите поставить мне галочку, если мой ответ сработал для вас. 02.03.2018
  • Вы утверждаете, что знаете это, но изо всех сил старались связать это с рекурсией в своем ответе. 02.03.2018
  • @ScottHunter, чтобы быть справедливым, если вызываемая функция не предназначена для получения возвращаемого значения, returning это было бы неправильно. 02.03.2018
  • Вам все равно придется возвращать что-то; опять же, не имея ничего общего с рекурсией. 03.03.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..