Значение свойства когда функция поднимается вверх из рекурсии.
День добрый!
Помогите пожалуйста. Я дохожу по рекурсии до самого глубокого свойства "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);
|
Цитата:
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));
|
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>
|
рони,
Это просто запоминается путь туда в обратном порядке. А вот как вернуться по объекту обратно? :blink: |
Dilettante_Pro,
не понимаю |
Цитата:
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);
|
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);
|
Да. Оно, чёрт побери.
Спасибо большое. Пока не очень понял как это работает. Попробую понять. |
Ребята, всем большое спасибо. Помогли
Чую, не последний раз к Вам обращаюсь. |
Кривой костыль: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>
|
рони,
Цитата:
Кстати, у ksa вполне правильный ответ и без излишеств - оформлен неправильно, поэтому не запускается. Мне думалось другое - подняться по объекту обратно. Получилось некрасиво. |
Да, именно.
Значения выводятся по мере выхода функции из рекурсии. Я думал что можно как-то вытащить значения с помощью Function.caller, т.е. как-то вытряхнуть из стека вызовов. |
| Часовой пояс GMT +3, время: 23:33. |