用递归法求奇数次整数

2024-09-27 21:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一些指导与下列代码请。我正在学习Python,我来自Java和C,在那里我还是个初学者。我想写一个函数,返回出现奇数次的数字。假设数组总是大于1,并且总是只有一个整数出现奇数次。我想使用递归。你知道吗

当我存储结果时,函数不会返回值,因为我得到了一个NoneType。请,我不是在寻找一个解决方案,但一些建议,在哪里寻找和如何思考时调试。你知道吗

def find_it(seq):
    seqSort = seq
    seqSort.sort()
    def recurfinder(arg,start,end):
        seqSort = arg
        start = 0
        end = seqSort.length()-1
            for i in range(start,end):
                counter = 1
                pos = 0
            if seqSort[i+1] == seqSort[i]:
                counter+=1
                pos = counter -1
            else:
                if(counter % 2 == 0):
                    recurfinder(seqSort, pos+1, end)
                else:
                    return seqSort[i]
        return -1

Tags: 函数代码posreturnifdefcounterarg
3条回答

实际上,您需要从recurFinder之外的某个地方调用recurFinder来启动程序。你知道吗

def getOddOccurrence(arr, arr_size): 

    for i in range(0, arr_size): 
        count = 0
        for j in range(0, arr_size): 
            if arr[i] == arr[j]: 
                count+= 1

        if (count % 2 != 0): 
            return arr[i] 

    return -1

arr = [2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2 ] 
n = len(arr) 
print(getOddOccurrence(arr, n))

这个答案使用递归和dict进行快速计数器查找-

def find_it(a = [], i = 0, d = {}):
  if i >= len(a):
    return [ n for (n, count) in d.items() if count % 2 == 1 ]
  else:
    d = d.copy()
    d[a[i]] = d.get(a[i], 0) + 1
    return find_it(a, i + 1, d)

它是这样工作的-

print(find_it([ 1, 2, 2, 2, 3, 3, 4, 5, 5, 5, 5 ]))
# [ 1, 2, 4 ]

print(find_it([ 1, 2, 3 ]))
# [ 1, 2, 3 ]

print(find_it([ 1, 1, 2, 2, 3, 3 ]))
# []

print(find_it([]))
# []

上面的id在调用站点公开。另外,因为我们依赖于Python的默认参数,所以我们必须调用d.copy(),以避免发生d突变。使用内部loop可以缓解这两个问题-

def find_it(a = []):
  def loop(i, d):
    if i >= len(a):
      return [ n for (n, count) in d.items() if count % 2 == 1 ]
    else:
      d = d.copy()
      d[a[i]] = d.get(a[i], 0) + 1
      return loop(i + 1, d)
  return loop(0, {})

工作原理同上。你知道吗

相关问题 更多 >

    热门问题