1
A
回答
1
您只需編寫一個帶有堆棧的循環來記錄要處理的下一棵樹。你還需要一個累加器。但是這與CPS並沒有什麼不同,所以它可能不是你想要的。
(define (atom? x)
(not (pair? x)))
(define (size tree)
(let loop ((t tree) (stack '()) (total 0))
(cond
((and (atom? t) (null? stack)) (add1 total))
((atom? t) (loop (car stack) (cdr stack) (add1 total)))
(else (loop (cadr t) (append (cddr t) stack) (add1 total))))))
(define (flatten tree)
(let loop ((t tree) (stack '()) (l '()))
(cond
((and (atom? t) (null? stack)) (reverse (cons t l)))
((atom? t) (loop (car stack) (cdr stack) (cons t l)))
(else (loop (cadr t) (append (cddr t) stack) (cons (car t) l))))))
相關問題
- 1. 尾遞歸vs頭經典遞歸
- 2. 尾遞歸在樹上
- 3. 遞歸與VS.尾遞歸
- 4. 整蠱遞歸(尾)函數的例子
- 5. 遞歸樹生成
- 6. 它是一個尾遞歸
- 7. Coverting遞歸函數的尾遞歸一個在Python
- 8. 解決遞歸的遞歸樹方法
- 9. 如何做二叉樹的尾遞歸?
- 10. F#尾遞歸樹的路徑列表
- 11. 尋找遞歸關係
- 12. 如何將此樹遞歸更改爲尾遞歸?
- 13. 尾遞歸?
- 14. Javascript尾遞歸
- 15. 尾遞歸算法歸併
- 16. 遞歸過程到尾遞歸過程
- 17. 尾遞歸與前向遞歸
- 18. 尾遞歸vs原始遞歸
- 19. 遞歸,尾遞歸和迭代
- 20. 樹中的遞歸
- 21. 遞歸從樹
- 22. F#:遞歸樹
- 23. 遞歸Splay樹
- 24. 樹+遞歸
- 25. 樹叉()遞歸
- 26. 如何在本例中將遞歸轉換爲尾遞歸?
- 27. 的System.OutOfMemoryException一個尾遞歸函數
- 28. 複雜的尾遞歸案例
- 29. django:CMS的遞歸/樹狀URL映射?
- 30. 尾遞歸遍歷樹沒有循環
這正是我所期待的。 – Rhangaun 2010-04-22 15:40:57