Как работает return в рекурсии?

У меня есть рекурсивная функция, задача которой найти поле

findSelectTag(el){
        if(el.children.length > 0 && el.children != undefined){
            
            for(let child of el.children){
                if(child.tagName == "SELECT"){
                    console.log(child)
                    return child;
                }else{
                    this.findSelectTag(child);
                }
            }

        }
    }

console.log(child) выдает правильный елемент, но return не возврощает ничего(


Ответы (2 шт):

Автор решения: Aziz Umarov

Должно быть 3 return

Первый if без return на else и второй if else тоже

findSelectTag(el){
    if(el.children.length > 0 && el.children != undefined){
        
        for(let child of el.children){
            if(child.tagName == "SELECT"){
                console.log(child);
                return child;
            }else{
                return this.findSelectTag(child);
            }
        }

    } 
   return null;

}

Исправлено, не хватало продолжения цикла по элементам

findSelectTag(el){
    if(el.children.length > 0 && el.children != undefined){
        
        for(let child of el.children){
            if(child.tagName == "SELECT"){
                console.log(child);
                return child;
            }else{
                if (this.findSelectTag(child)) {
                      return this.findSelectTag(child);
               } else { 
                    continue; // смысла нет но наглядно
               }
            }
        }

    } 
   return null;

}
→ Ссылка
Автор решения: Igor
findSelectTag(el) {
  for(let i = 0; el.children && i < el.children.length; i++) {
    let child = el.children[i];
    if (child.tagName == "SELECT") {
      return child;
    } else {
      let s = this.findSelectTag(child);
      if (s) return s;
    }
  }
  return null;
}
→ Ссылка