| 
	
		
 Как рекурсию заменить максимально быстрым циклом 
		
		
		
		
function ololo(q) {
	if(q>5) return;
	alert(q);
	ololo(q+1);
}
ololo(1)
 | 
	
		
 Вот это же не правильный вариант? 
	
var stark = [];
stark.push(1);
while(stark.length){
	var value = stark[stark.length-1];
	if(value>5){
		stark.pop();
		break;
	}else{
		alert(value);
		stark.push(value+1);
	}
}
 | 
	
		
 Как я понимаю все переменные и параметры которые использует функция нужно запихать в стек? 
	 | 
	
		
 
function ololo(a,b) {
  for(var i=1; i<b+1; i++){alert(i);}
}
ololo(1,5);
 | 
	
		
 Deff, спасибо; Вы гений; Ваш пример превосходит мой в разы; А теперь сделайте то же самое с этим: 
	
alertHTML( document.body )
function alertHTML(context){
    alert(this.innerHTML);
    for ( var i = 0; context.childNodes.lenght; i++ ) {
        alertHTML(context.childNodes[i])
    }
}
 | 
	
		
 если вас порядок нод не волнует 
	самый быстрый так 
alertHTML(document.body);
function alertHTML(context) {
  var nodes = context.childNodes,
        i = nodes.length;
  while (i--) alert(nodes[i]);
}
 | 
	
		
 Dmitriyff, 
	Но ведь я создал эту тему для разбора способов развертывания рекурсии в циклы а не для какого-то конкретного решения проблемы; А Ваш вариант вообще, мягко говоря, не рекурсия;  | 
	
		
 оу, сорри... не усмотрел =-))), сейчас придумаем 
	 | 
	
		
 Цитата: 
	
 Потому как не известно не только число итераций, но и уровень вложения. Возможно некие частные слочаи, где как раз возможно определить что-то конечное, и можно будет "развернуть" в циклы... Но "общего" решения не будет.  | 
	
		
 как-то так 
	
var f = function(nodes) {
	var	node, 
		stack = [];
	stack.push(nodes)
	while (stack.length) {
		node = stack.pop();
		if (node.childNodes.length) {
			var i = node.childNodes.length;
			while(i--) stack.push(node.childNodes[i]);
		} else {
			console.log(node);
		}
	}
}
 | 
| Часовой пояс GMT +3, время: 12:07. | 
		
  |