遞歸與非遞歸
回答
遞歸函數是以編程語言實現的過程或子例程,其實現引用自身。
非遞歸函數是一種編程語言實現的程序或子程序,其實施不引用自身
下面是遞歸和非遞歸斐波那契數列的鏈接: - Recursive and Non Recursive Fibonacci Series
好吧,現在告訴我:這些 - 函數a(x ){return x? b(x-1):0; }函數b(x){return x? a(x-1):0; ''遞歸? – raina77ow
我不同意。我可以開發一個用給定的編程語言編寫的函數,它調用用不同的編程語言編寫的函數,並且這兩個實現都引用「其他」函數。結果:遞歸引用,在每個函數的實現中不可見。這是一個間接遞歸。 – TheBlastOne
@ raina77ow,沒錯,你甚至不需要使用不同的語言。遞歸。間接的影響。 – TheBlastOne
「遞歸」只是手段一個函數自己調用。這可能是也可能不是有意的(無意的遞歸是造成大量崩潰的原因)。
故意遞歸(其中一個函數執行操作的一部分,然後調用自己執行其餘部分)通常是一種有用的編程範例,但需要某種程度的理解/經驗/技巧才能「 。
基本上,遞歸可以用來代替「迭代」(循環)並替換伴隨的數組分配(使用函數體的局部變量)。但並不是每個迭代或使用數組的函數都可以有效地轉換爲遞歸等價的。
如果該問題適用於遞歸,可以經常編寫一個遞歸版本,該版本與非遞歸版本的執行效率相當......可能稍微更好或更差,具體取決於調用機制的效率如何與語言/編譯器中的循環和數組索引相比。在存儲方面,遞歸很少有效,但是它不需要爲特定的問題預先分配(並且預先知道分配的大小)。
大多數情況下,遞歸更好(實際上是),因爲它使得實現更簡單,更容易出錯,並且錯誤是計算中最大的成本。 (但是,當然,做得不當也可能花費你很大的時間。)
當遞歸很好時,它非常好。當遞歸不好時,它非常糟糕。
那麼時間不受影響?記憶如何? – dalawh
兩者都受到影響,只是效果不可預測。在簡單情況下,遞歸的內存要高得多,因爲每次調用都會有一個堆棧幀開銷。但是對於複雜的情況,爲了「萬一」分配大型陣列的需求被消除了。 –
- 1. 遞歸鎖(Mutex)與非遞歸鎖(Mutex)
- 2. 遞歸與VS.尾遞歸
- 3. 非遞歸os.walk()
- 4. 遞歸代碼非循環遞歸
- 5. 遞歸和非遞歸鎖(互斥鎖)
- 6. 性能:遞歸 - 非遞歸(IE)
- 7. 非遞歸製作
- 8. AVL樹非遞歸
- 9. Java - SubSet和遞歸遞歸遞歸圖
- 10. Haskell的遞歸函數與遞歸lambdas
- 11. 尾遞歸與前向遞歸
- 12. q - 遞歸與/
- 13. 遞歸與doT.js
- 14. 與Python遞歸
- 15. postgres - 與遞歸
- 16. 遞歸0s和1s遞歸
- 17. Java中的遞歸遞歸
- 18. asp.net mvc遞歸html遞歸
- 19. 我如何遞歸遞歸?
- 20. 與遞歸函數
- 21. 尾遞歸與List.fold_left
- 22. 變量與遞歸
- 23. 遞歸與列表
- 24. 遞歸與python argparse
- 25. 與遞歸混淆
- 26. 合併與遞歸
- 27. 遞歸與迭代
- 28. 遞歸與mod_rewrite的
- 29. 非遞歸makefile示例
- 30. 非遞歸階乘C
遞歸函數調用遞歸函數。 – raina77ow
@ raina77ow,好的,但這是因爲遞歸函數直接或間接地調用自己。 – TheBlastOne
你在問什麼是遞歸和迭代之間的區別......它已經在SO上回答了很多次,http://stackoverflow.com/questions/72209/recursion-or-iteration和http://stackoverflow.com/問題/ 2576993 /遞歸和迭代和http://stackoverflow.com/questions/2185532/why-should-recursion-be-preferred-over-iteration – Arham