如何仅使用Python中的递归返回列表的奇数?

zal*_*rak -7 python recursion

我不想使用while或for循环,只想使用递归来返回给定列表中的奇数.谢谢!

Jos*_*ews 9

def find_odds(numbers):
  if not numbers:
    return []
  if numbers[0] % 2 == 1:
    return [numbers[0]] + find_odds(numbers[1:])
  return find_odds(numbers[1:])
Run Code Online (Sandbox Code Playgroud)

无需额外的变量或参数.


Joh*_*ooy 7

def only_odd(L):
    return L[0:L[0]&1]+only_odd(L[1:]) if L else L
Run Code Online (Sandbox Code Playgroud)

这个版本更快,因为它避免了复制L

def only_odd_no_copy(L, i=0):
    return L[i:i+(L[i]&1)]+only_odd_no_copy(L, i+1) if i<len(L) else []
Run Code Online (Sandbox Code Playgroud)

这个只使用O(log n)堆栈空间

def only_odd_logn(L):
    x=len(L)/2+1
    return L[:L[0]&1] + only_odd2(L[1:x]) + only_odd_logn(L[x:]) if L else L
Run Code Online (Sandbox Code Playgroud)