2015-02-15 3 views
0

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

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: максимальная глубина рекурсии превышено. Кто-нибудь знает, как его решить?

+0

Можете ли вы привести пример, который вы получили эту ошибку? – ozgur

+0

в fuction 'FindFirstIndex', пожалуйста, предоставьте условие' elif', что вы должны проверить. В противном случае он повторяется каждый раз, если выше двух условий 'if' являются ложными – itzMEonTV

+0

Hey @MohitBhasi man Вы имеете в виду тот же вопрос, любезно отредактируйте свой комментарий. Спасибо – ZdaR

ответ

0

Рекурсивный фикцию следует проверить аргументы в каждом recursion.Also должен изменить значение arguments.Otherwise он никогда ends.For например

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

Который обеспечивает факториал п

0

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

import sys 
sys.setrecursionlimit(3000) 

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

Смежные вопросы