В вашем текущем коде есть 2 ошибки, вы возвращаете номер, а не его индекс, и вы действительно не пропускаете инкрементированный индекс обратно. Таким образом, сделать это вместо:
>>> def search(myList, number):
... if myList[0] == number:
... return 0
... return 1 + search(myList[1:], number)
...
>>> search([1,2,3,4,5],3)
2
Теперь, когда работает, если у нас есть число в списке, но если нет, то мы получим ошибку индекса.
>>> search([1,2,3,4,5],6)
IndexError: list index out of range
Таким образом, мы должны обернуть эту функцию в примерки, за исключением блока
def search(myList, number):
def search_recursive(lst, num):
if lst[0] == num:
return 0
return 1 + search_recursive(lst[1:], num)
try: return search_recursive(myList, number)
except IndexError: return -1
И теперь он будет работать
>>> search([1,2,3,4,5],6)
-1
>>> search([1,2,3,4,5],5)
4
Но выше, следует использовать только когда вы хотите сделать это рекурсивно, и обратите внимание, что когда вы делаете list[1:]
, вы выполняете сортировку списка, которая каждый раз создает новый список ,
Таким образом, если делать это без рекурсии допускается, используйте встроенный list.index
метод:
>>> def search(my_list, number):
... try: return my_list.index(number)
... except ValueError: return -1
...
>>> search([1,2,3,4,5],5)
4
>>> search([1,2,3,4,5],6)
-1
Почему вы хотите использовать рекурсию ? List уже предоставляет этот метод 'list.index' – wim