@Kiri9IH
I work at IT

Почему результат выводится как undefined?

Написал рекурсивную реализацию бинарного поиска, но позиция элемента не выводится. Почему?
function test(list, guess, low=0, hight=list.length-1){
      
      mid = parseInt((low+hight)/2);
     // console.log("low = "+low+" hight = "+hight+" mid = "+parseInt(mid+1));
      if (list[mid]==guess){
         console.log("Вывод "+parseInt(mid+1));  //<------ вывод проходит верно
         return mid+1;
      };
        
      if (low==hight){
        //console.log(2);
        return -1;
      };
      test(list, guess, (list[mid]<guess) ? mid+1 : low, (list[mid]>guess) ? mid-1 : hight);
     
    }
    a = test([2,4,4,6,8,12,15],15);
    console.log(a); // undefined
  • Вопрос задан
  • 170 просмотров
Решения вопроса 2
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Потому что вы ничего не возвращаете из функции.

А под условия другие видимо не подходит там где есть return mid+1 или -1
Ответ написан
Комментировать
LaRN
@LaRN
Senior Developer
При возврате из рекурсии никак не используется результат вернувшийся из функции test.
Попробуйте написать:
return test(list, guess, (list[mid]guess) ? mid-1 : hight);

И еще для вашего примера вы попадете в ветку:
if (list[mid]==guess){
console.log("Вывод "+parseInt(mid+1)); //<------ вывод проходит верно
return mid+1;
};
и mid будет равен 6, т.е. из функции прилетит 6+1 = 7, что выходит за границу массива.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 22:03
3000 руб./за проект
23 нояб. 2024, в 21:53
30000 руб./за проект
23 нояб. 2024, в 21:49
1000 руб./в час