Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Значение свойства когда функция поднимается вверх из рекурсии. (https://javascript.ru/forum/misc/75154-znachenie-svojjstva-kogda-funkciya-podnimaetsya-vverkh-iz-rekursii.html)

ibmpclp 07.09.2018 13:58

Значение свойства когда функция поднимается вверх из рекурсии.
 
День добрый!

Помогите пожалуйста.
Я дохожу по рекурсии до самого глубокого свойства "next" в списке.
Как мне получить значения свойства "value" на выходе из рекурсии, когда функция поднимается вверх?
Чтобы было:
4
3
2
1

let list = {
    value: 1,
    next: {
      value: 2,
      next: {
        value: 3,
        next: {
          value: 4,
          next: null
        }
      }
    }
  };
  
  function printList(list) {
    console.log(list.value);
  
    if (list.next) {
      printList(list.next);
    }
  }
  
  printList(list);

ksa 07.09.2018 14:05

Цитата:

Сообщение от ibmpclp
Как мне получить значения свойства "value" на выходе из рекурсии, когда функция поднимается вверх?

Оно?

let list = {
	value: 1,
	next: {
		value: 2,
		next: {
			value: 3,
			next: {
				value: 4,
				next: null
			}
		}
	}
};

function printList(list) {
	console.log(list.value);
	if (list.next) {
		return printList(list.next);
	} else {
		return list.value;
	}
}

alert(printList(list));

рони 07.09.2018 14:12

ibmpclp,
<script>
let list = {
    value: 1,
    next: {
      value: 2,
      next: {
        value: 3,
        next: {
          value: 4,
          next: null
        }
      }
    }
  };

  function printList(list) {
  var a = [list.value];
    if (list.next) {
      a = printList(list.next).concat(a);
    }
   return a
  }
  var a =  printList(list);
  document.write(JSON.stringify(a, null, 4))
  </script>

Dilettante_Pro 07.09.2018 14:24

рони,
Это просто запоминается путь туда в обратном порядке.
А вот как вернуться по объекту обратно? :blink:

рони 07.09.2018 14:46

Dilettante_Pro,
не понимаю

ksa 07.09.2018 15:17

Цитата:

Сообщение от ibmpclp
Чтобы было:
4
3
2
1

Вона че... :D

let list = {
	value: 1,
	next: {
		value: 2,
		next: {
			value: 3,
			next: {
				value: 4,
				next: null
			}
		}
	}
};

function printList(list) {
	if (list.next) {
		printList(list.next);
	};
	console.log(list.value);
}

printList(list);

рони 07.09.2018 15:19

Dilettante_Pro,
это?
let list = {
    value: 1,
    next: {
      value: 2,
      next: {
        value: 3,
        next: {
          value: 4,
          next: null
        }
      }
    }
  };

  function printList(list) {
  var a = list.value;
    if (list.next) {
      printList(list.next);
    }
   alert(a);
   return a
  }
  var a =  printList(list);

ibmpclp 07.09.2018 15:45

Да. Оно, чёрт побери.
Спасибо большое. Пока не очень понял как это работает.
Попробую понять.

ibmpclp 07.09.2018 15:47

Ребята, всем большое спасибо. Помогли
Чую, не последний раз к Вам обращаюсь.

Dilettante_Pro 07.09.2018 16:06

Кривой костыль:write:
<script>
var list = {
    value: 1,
    next: {
      value: 2,
      next: {
        value: 3,
        next: {
          value: 4,
          next: null
        }
      }
    }
  };
  
var vName = "list",
     down = true;
  
  function printList(lst) {
      console.log(lst.value);
  
      if (lst.next && down) {
         vName += ".next";
         printList(lst.next);
       }
       else {
          down = false;
          if(vName.length > 5) {
             vName = vName.substr(0,vName.length - 5);
             printList(eval(vName));
           }
       }
  }
  
  printList(list);
</script>

Dilettante_Pro 07.09.2018 16:20

рони,
Цитата:

Сообщение от ibmpclp
Как мне получить значения свойства "value" на выходе из рекурсии, когда функция поднимается вверх?

По заданию ТС вроде да - значения выводятся по мере выхода функции из рекурсии. У вас есть лишние телодвижения, затрудняющие понимание.
Кстати, у ksa вполне правильный ответ и без излишеств - оформлен неправильно, поэтому не запускается.


Мне думалось другое - подняться по объекту обратно. Получилось некрасиво.

ibmpclp 07.09.2018 16:55

Да, именно.
Значения выводятся по мере выхода функции из рекурсии.
Я думал что можно как-то вытащить значения с помощью Function.caller, т.е. как-то вытряхнуть из стека вызовов.


Часовой пояс GMT +3, время: 03:20.