Значение свойства когда функция поднимается вверх из рекурсии.
День добрый!
Помогите пожалуйста. Я дохожу по рекурсии до самого глубокого свойства "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, время: 03:20. |