1
A
回答
0
顯然的問題是關於兩個不同的東西,即
- 二進制搜索,可重複二者並遞歸執行;
- 關於調用堆棧的遞歸和迭代實現之間的差異。
二進制搜索是指在排序列表(或排序數組)中查找對象。策略是檢查列表中間的對象;要麼找到想要的對象,要麼沒有。如果找不到,則必須在列表的左半部分或右半部分進行搜索;無關的一半可以被丟棄。
這種方法可以迭代實現,其中輔助索引控制搜索。或者,它可以遞歸地實現,其中二分搜索相關的一半再次被調用。
在迭代實現中,對二進制搜索只有一個調用,這意味着不會爲搜索生成新的堆棧幀。在遞歸實現中,爲每個遞歸調用生成一個新的棧幀。由於每個步驟都會丟棄至少一半的搜索空間,這意味着最多可生成log(n)
新的堆棧幀(每次遞歸調用一個),其中n
是初始列表中的對象數。
0
SHORT:基本上,堆棧是系統用來在調用它時存儲函數狀態的一部分內存(參數,變量等)。對於更長的描述,你可以參考這個偉大的link。二進制搜索沒有連接到堆棧,實際上,任何一段代碼都可以使用堆棧。在你的情況下,你被要求的是當你調用你的二進制搜索功能時,描述堆棧的狀態(如你提供的圖片中的那個)。
相關問題
- 1. 遞歸Java - 堆棧
- 2. openCL堆棧位置(遞歸)
- 3. 遞歸反轉堆棧
- 4. 遞歸結果堆棧
- 5. 遞歸堆棧大小?
- 6. 遞歸堆棧大小
- 7. 尾遞歸堆棧溢出
- 8. 堆棧缺少遞歸調用Java的
- 9. 遞歸方法中的堆棧溢出
- 10. 堆棧上的遞歸函數
- 11. cuda中的遞歸/堆棧和隊列
- 12. L系統和在瑪雅的堆棧
- 13. 遞歸調用堆棧深度
- 14. 遞歸方法堆棧溢出錯誤
- 15. 堆棧溢出和遞歸方法
- 16. 合併排序遞歸調用堆棧
- 17. 堆棧溢出與尾遞歸
- 18. 遞歸java堆棧溢出錯誤
- 19. 使用遞歸溢出堆棧
- 20. 如何避免遞歸堆棧溢出?
- 21. 遞歸函數堆棧溢出
- 22. ColdFusion:遞歸太深;堆棧溢出
- 23. 遞歸時堆棧級別太深(SystemStackError)
- 24. 在遞歸函數中存儲堆棧
- 25. 遞歸求和堆棧溢出
- 26. 遞歸菜單系統
- 27. Monad變換器:用MaybeT(狀態堆棧)實現堆棧機
- 28. Microsoft團隊系統等效堆棧
- 29. Rails測試系統堆棧錯誤
- 30. Python遞歸變量狀態