Напишите функцию, которая получает на вход произвольную строку вида: 5*(3+4)-7*9+3*(2+(2-7))(арифметическое выражение со скобками любого уровня вложенности и операциями умножения, вычитания и сложения) и в качестве ответа возвращает результат этого выражения. Рекомендация: сначала убедитесь, что число открывающих скобок, равно числу закрывающих.
В этом разделе собраны задачи на рекурсию.
На практике, если есть возможность написать нерекурсивный код, то лучше писать именно не рекурсивно, но тем не менее владеть этим методом необходимо, так как многие алгоритмы очень удобно описываются с помощью "матрёшки" рекурсивных вызовов.
Рекурсия -- приём в программировании, когда некоторый модуль программы (фукция, метод) вызывают сами себя.
Такой вызов называет рекурсивным ("самовызов").
Конечность рекурсии
В ходе выполнение рекурсивный алгоритм всё время как бы "зарывается" всё глубже в уровни вызовов, чтобы этот процесс не был бесконечным (обычно бесконечная рекурсия означает ошибку в программе), следует четко понимать:
/**
* Получает родиля указанноого уровня для данного элемента
*
* @param {integer} n уровень родителя (вверх по дереву DOM)
* Например: уровень папы = 0, прадедушки = 2
* @returns {type.fn.nthParent.$p}
*/
$.fn.nthParent = function(n){
var $p = $(this);
while ( n-- >= 0 )
{
$p = $p.parent();
}
return $p;
};
Использовать так:
$('селектор').nthParent(1); // получаем блок "дедушки" данного блока (родитель родителя)