Вот Binary Search
код в Python:Рекурсивная функция: В чем разница между C++ и Python?
def binarySearch(arr,key,low,high):
if high < low:
return -1
mid = (low+high) >> 1
if arr[mid] < key:
binarySearch(arr,key,mid+1,high)
elif arr[mid] > key:
binarySearch(arr,key,low,mid-1)
else:
return mid
arr = [1,2,3,4,5,6]
length = len(arr)
result = binarySearch(arr,6,0,length-1)
print('result:',result)
Выход:
result:None
Но я ожидал:
result:5
Затем я пишу подобный код в C++:
int binarySearch(int arr[],int key,int low,int high)
{
if(high < low)
return -1;
int mid = (low+high) >> 1;
if(arr[mid] < key)
binarySearch(arr,key,mid+1,high);
else if(arr[mid] > key)
binarySearch(arr,key,low,mid-1);
else
return mid;
}
int main()
{
int arr[] = {1,2,3,4,5,6};
int len = sizeof(arr)/sizeof(arr[0]);
int result = binarySearch(arr,6,0,len-1);
cout<<"result:"<<result<<endl;
return 0;
}
Выход:
result:5
Она работает идеально.
Может ли кто-нибудь объяснить причину этого странного поведения?
P.S. Я знаю, что я должен использовать
return binarySearch(...)
в Python, но я хочу знать, почему код C++ может отлично работает.
Речь идет не только о C++, но и об ошибке в вашем Python. Вы ничего не возвращаете в блок 'if' или' elif'. Только 'else' имеет оператор' return'. Попробуйте 'return binarySearch (...)' в ваших блоках 'if' и' elif' – Arc676
Ваш код на C++ такой же багги, как ваш код на Python, кстати. – Mat
@ Arc676 Но почему код C++ может работать идеально? – Ren