Вход

Просмотр полной версии : Значение свойства когда функция поднимается вверх из рекурсии.


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
Как мне получить значения свойства "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
Чтобы было:
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
рони,
Как мне получить значения свойства "value" на выходе из рекурсии, когда функция поднимается вверх?
По заданию ТС вроде да - значения выводятся по мере выхода функции из рекурсии. У вас есть лишние телодвижения, затрудняющие понимание.
Кстати, у ksa вполне правильный ответ и без излишеств - оформлен неправильно, поэтому не запускается.


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

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