使用嵌套循環或遞歸函數的輸出有什麼區別?在考慮條件時,哪種方法最適合生成組合?嵌套循環和遞歸函數有什麼區別?
-2
A
回答
1
遞歸算法從同一個函數(遞歸)中調用一個函數。是否執行遞歸是基於某種條件。
function foo()
{
?/ do work
if(condition)
foo();
}
迭代算法通常會調用函數一些次數(n)。
function foo()
{}
for(int i = 0; i < n; i++)
foo();
遞歸函數時需要重複操作某些數據塊和的是否重複的條件是依賴於前一個操作,通常使用。在數學中計算一個截斷的無窮級數就是一個例子。
當條件不依賴於以前的操作時,通常會使用迭代函數。反轉矩陣具有預定義的n。
這兩種方法都可以用於大多數目的,但您通常會發現在特定情況下一種方法比另一種方法更容易。
儘管有遞歸的意識,但仍然存在調用堆棧溢出。如果可以保證算法會收斂並在一定數量的遞歸內結束,最好只使用它。
0
遞歸和迭代(循環)是一般意義上不可比較的不同策略。對於某些算法,您可能同時具有迭代和遞歸版本(例如階乘或斐波那契數字),對於其他算法,其中一個可能比另一個更直觀(例如遞歸樹行走)。
無論算法遵循何種策略,輸出必須相同,否則您將實現不同的算法。
底線,它真的取決於你將使用什麼算法。
1
遞歸可以被看作是「做」循環的另一種方式。主要優點是代碼可讀性,正如你在這個Stackoverflow question中看到的,在這種情況下,當有很多嵌套循環時。
但要小心,因爲Python(1000)有一個小的遞歸限制。您可以通過鍵入
>>>import sys
>>>print sys.getrecursionlimit()
1000
對於遞歸的其他案件VS循環的概述驗證,檢查this pdf。但是,如this Stackoverflow answer中所述,您應該堅持Python的純迭代方案。
相關問題
- 1. 遞歸嵌套循環
- 2. Scheme/Lisp嵌套循環和遞歸
- 3. javascript中兩個嵌套循環之間有什麼區別?
- 4. 循環和迭代有什麼區別?
- 5. JavaScript中的嵌入和嵌套循環有區別嗎?
- 6. 遞歸和遞歸枚舉語言有什麼區別
- 7. 遞歸函數 - N的嵌套循環不斷變化indicies
- 8. 將嵌套循環轉換爲遞歸
- 9. 這兩個遞歸函數有什麼區別?
- 10. 循環遞歸函數
- 11. 嵌套數組和關聯數組有什麼區別?
- 12. 無限循環和循環之間有什麼區別?
- 13. Ruby:for循環和每個循環之間有什麼區別?
- 14. 如何將3個嵌套循環的函數變成一個遞歸函數?
- 15. 嵌套循環和函數式編程
- 16. 遞歸和類實例遞歸的區別是什麼
- 17. 這個while循環有什麼區別?
- 18. NtFsControlFile()和DeviceIoControl()函數有什麼區別?
- 19. $ get和$ find函數有什麼區別?
- 20. round()和trunc()函數有什麼區別?
- 21. 動態嵌套for循環使用遞歸(所有排列)
- 22. UnboundLocalError嵌套函數的遞歸調用
- 23. 將三個嵌套for循環嵌入遞歸
- 24. 嵌套循環這個函數的複雜性是什麼?
- 25. 遞歸。 return func()和if(func())返回true有什麼區別?
- 26. 閉合和嵌套閉合有什麼區別?
- 27. 嵌套和級聯if-else有什麼區別
- 28. 嵌套類和遞歸
- 29. 嵌套JSON和遞歸$。每()
- 30. JavaScript中的遞歸函數或循環?
這取決於您要解決的具體問題。你不會一直使用一個而不是其他的。注意「[瞭解遞歸](http://stackoverflow.com/questions/717725/understanding-recursion)」 – 2014-10-19 17:11:49