Задача на рекурсию в JavaScript [закрыт]

284
15 октября 2021, 09:00
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.

Закрыт 1 год назад.

Улучшить вопрос

Задача

Напишите функцию countChar(str, char) : array, которая будет считать количество символов char в строке str и в каждом отдельном слове строки. Возвращаемое значение – массив, первый элемент которого кол-во символов в строке, а дальнейшие элементы – кол-во символов в каждом слове. Если в слове символа нет, то выводить 0. Пример, строка “Реализуйте функцию с применением рекурсии”, символ “и”, результат [6, 1, 1, 0, 2, 2]. Использовать стандартные методы для строк и массивов.

Как рекурсивно подсчитать количество нужных символов?

Answer 1

Нужно постараться, чтобы как-то искусственно ввести рекурию туда, где она не нужна)
Ну можно так, например (Если match нельзя, можно сделать через цикл и indexOf):

let str = "Реализуйте функцию с применением рекурсии"; 
 
console.log( countChar(str, 'и') ); 
 
function countChar(str, char, arr) { 
  let space = str.indexOf(" "); // Находит индекс первого пробела  
  // Или возвращает -1, если его нет. 
  let reg = new RegExp( char , "g" ); // См. "регулярные выражения". 
  arr = arr || [ (str.match(reg) || "").length ];  
  // Первым элементом сразу будет кол-во всех совпадений 
   
  if( space == -1 ){ 
    arr.push( (str.match(reg) || "").length ); 
    // Если match вернет null, получится ошибка "cannot read length of null" 
    // Добавлено ИЛИ || ""  
    // Если первое выражение будет null, возьмется второе. А его length == 0; 
    return arr; 
  } 
   
  arr.push( (str.slice(0, space).match(reg) || "").length ); 
  return countChar(str.slice( space + 1 ), char, arr); 
}

Answer 2

Можно так.

var count = countChar('Реализуйте функцию с применением рекурсии', 'и'); 
console.log(count); 
 
function countChar(str, char){ 
	 
	// проверяем тип аргументов 
	if((typeof str !== 'string') || (typeof char !== 'string')){ 
		return false; 
	} 
	 
	var words = str.split(' '); // делим фразу на слова 
	 
	// если одно слово то считаем кол-во нужных символов в нем и возвращаем результат 
	if(words.length === 1){ 
		var count = 0; 
		var word = words[0]; 
		var lastpos = 0; 
		while((lastpos = word.indexOf(char, lastpos)) !== -1){ 
			lastpos++; // поиск следующего символа начинаем на позицию дальше после найденного 
			count++; 
		} 
		return count; 
		 
	// если слов несколько передаем каждое слово в данную функцию и записываем результат в массив 
	} else if (words.length > 1) { 
		var countArr = [0]; 
		words.forEach(function(word){ 
			var count = countChar(word, char); 
			if(typeof count !== 'number') return; 
			countArr[0] += count; 
			countArr.push(count); 
		}); 
		return countArr; 
		 
	} else { 
		return false; 
	} 
}

READ ALSO
Скрыть блок при нажатии вне его

Скрыть блок при нажатии вне его

Есть два input-а реализованные, как selectЕсли кликаем на первый блок, затем на второй, то первый должен закрываться У них одинаковые классы

141
WPF не работает MinWidth/MinHeight

WPF не работает MinWidth/MinHeight

Не работает MinWidth/MinHeightЧто делать? Xaml: 1) Работает

121
Unity возврат структуры из метода

Unity возврат структуры из метода

вот пример метода, я хочу узнать что он вернёт, копию структуры или саму структуру и если он вернёт копию то как мне получить сам объект

163
Не удается авторизоваться в mysql бд, через C#

Не удается авторизоваться в mysql бд, через C#

Учусь взаимодействию C#(WinForms) с MySql, в интернете увидел пример кода для авторизации, который по сути переписал точь-в-точь:

76