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

Python RuntimeError: превышена максимальная глубина рекурсии

Я новичок в Python. Я написал функцию, которая возвращает количество вхождений x в отсортированном массиве повторяющихся элементов A:

def FindFirstIndex(A, low, high, x, n):
   low = 0
   high = len(A) - 1
   if low <= high:
      mid = low + (high - low) / 2
      if (mid == 0 or x > A[mid - 1]) and A[mid] == x:
          return mid
      elif x > A[mid]:
          return FindFirstIndex(A, (mid + 1), high, x, n)
      else:
          return FindFirstIndex(A, low, (mid - 1), x, n)        
   return -1


def FindLastIndex(A, low, high, x, n):
   low = 0
   high = len(A) - 1
   if low <= high:
       mid = low + (high - low) / 2
       if (mid == n - 1 or x < A[mid + 1]) and A[mid] == x:
          return mid
       elif x < A[mid]:
          return FindFirstIndex(A, low, (mid - 1), x, n)
       else:
          return FindFirstIndex(A, (mid + 1), high, x, n)           
   return -1

def COUNT(A, x):
   i = FindFirstIndex(A, 0, len(A) - 1, x, len(A))
   if i == -1:
      return i
   j = FindLastIndex(A, i, len(A) - 1, x, len(A))
   length = j - i + 1
   return length

Ошибка: RuntimeError: превышена максимальная глубина рекурсии. Кто-нибудь знает, как это решить?

15.02.2015

  • Можете ли вы привести пример, что вы получаете эту ошибку? 15.02.2015
  • в действительности FindFirstIndex укажите условие elif, которое вы должны проверить. В противном случае это повторяется каждый раз, если два вышеуказанных условия if неверны. 15.02.2015
  • Привет, @MohitBhasi, чувак, ты имеешь в виду тот же вопрос, пожалуйста, отредактируй свой комментарий. Спасибо. 15.02.2015
  • Проверьте свой FindFirstIndex. low=0 high=len(A) - 1. if low<=high из другого условия else: return FindFirstIndex(A, low, (mid - 1), x, n), вот теперь проверьте, low,high всегда фиксируется, если ваше условие else удовлетворяет. Так что это рекурсивно повторяется. Это ошибка. Вы меняете mid на mid-1 в рекурсивной функции. Но она нигде не проверяется. Также вы определили mid как значение из low и high, которое никогда не меняется, если вышеуказанное условие удовлетворяет 15.02.2015

Ответы:


1

Рекурсивная функция должна проверять аргументы в каждой рекурсии. Также должна изменять значения аргументов. В противном случае она никогда не завершится. Например.

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

Что дает факториал n

15.02.2015

2

уверен, что вы можете использовать:

import sys
sys.setrecursionlimit(3000)

Я считаю, что Python по умолчанию равен 1000, так что это должно сработать. Я предупреждаю вас, однако, если вы попытаетесь протестировать свою реализацию в очень большом списке, python может дать сбой, поэтому я рекомендую вам повторно реализовать свой код итеративно.

14.07.2017
Новые материалы

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

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

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

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

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

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

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