【发布时间】:2015-04-15 21:37:55
【问题描述】:
我是 Python 新手。我写了一个函数,返回排序后的重复元素数组 A 中 x 的出现次数:
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: 超出最大递归深度。 有人知道如何解决吗?
【问题讨论】:
-
你能举个例子说明你得到这个错误吗?
-
在函数
FindFirstIndex中请提供elif条件你必须检查的内容。否则如果以上两个if条件为假,则每次都重复 -
嘿@MohitBhasi 人,您指的是同一个问题,请编辑您的评论。谢谢
-
检查您的
FindFirstIndex。low=0high=len(A) - 1。if low<=high来自 else 条件else: return FindFirstIndex(A, low, (mid - 1), x, n),现在检查,如果您的 else 条件满足,low,high总是固定的。所以它是递归重复的。那就是错误。您正在递归函数中将mid更改为mid-1。但它不会检查任何地方。此外,您将mid定义为low和high的值,如果满足上述条件,则永远不会改变