-2
A
回答
1
非常粗糙的僞代碼,但它會是這樣的。
int checkList(List L, Value X, int current_index)
{
if (List.ValueAt(current_index) == X)
{
return 1;
}
if (List.Length == current_index+1)
{
return 0;
}
return checkList(L, X, current_index+1);
}
爲什麼它需要是遞歸的呢?迭代執行迭代要好得多,就像遞歸一樣,每個函數調用都需要添加到內存棧以獲取返回信息。
+0
但是這個函數是定義的尾遞歸,所以C編譯器不應該只使用一個棧幀來優化它嗎?或者這在C中是不可能的? – 2013-10-19 11:39:27
1
爲了解決使用遞歸的任何問題,你只需要思考「如果我知道更小的值的答案如何回答我的問題的一些變量X」的方式? - 在你的情況 - 「如果我已經知道X是否爲列表K的成員,那麼它是否爲列表L的成員,我該如何測試值X是否爲列表K的成員,即列表尾部(列表中的所有元素,但第一個元素) L·」
作爲一個例子,考慮不同的事情 - 如何獲得使用遞歸整數列表的最大值?
- 一個元素列表的最大價值是它的唯一元素,所以
MAX([ x ]) = x
- 如果我知道最大的名單的K後來我知道,最大的K和新的x值組成的列表僅僅是他們更大,所以
MAX([ x | K ]) = x if x > MAX(K) or MAX(K) otherwise
。在哪裏|是連接操作,所以[1 2 3] = [1 | [2 3]
現在,這樣的遞歸將採取列表的第一個元素,並將其與其他部分的最大比較和遞歸調用本身,直到它找到一個名單 - 爲其最大的是易於定義。現在,您可以用相同的方式找到問題的解決方案。
相關問題
- 1. 如何檢查ruby散列成員是否遞歸存在?
- 2. 使用遞歸技術在C中反轉鏈接列表C
- 3. 遞歸技術,而不是蟒蛇
- 4. T&L技術是否過時?
- 5. 檢查,如果樹是使用遞歸
- 6. 使用尾遞歸來查找列表的最大值
- 7. 遞歸檢查列表是否是Python中的迴文列表
- 8. 如何檢查網站技術
- 9. 如何使用遞歸類成員設置Struts表單
- 10. 應該使用什麼技術來修剪2d碰撞檢查?
- 11. 檢查是否使用遞歸
- 12. 如何使用網絡技術檢查iOS5?
- 13. 如何使用ASP.NET技術從本地主機檢查請求
- 14. 如何使用Web技術
- 15. 如何使用Bluemix技術
- 16. 項目管理+供技術人員和非技術人員使用的SCM?
- 17. 遞歸檢查原子列表中的
- 18. 使用遞歸來檢查字符串是迴文嗎?
- 19. 使用遞歸方法使用MacLaurin系列來計算e^x
- 20. 你如何使用技術來記憶一組術語?
- 21. 如何在yacc中使用遞歸檢查值?
- 22. 使用遞歸的成員測試
- 23. 技術檢查,如果在Doctrine2
- 24. 如何檢查遞歸函數是否完成?
- 25. 哪些是「X」的技術術語「爲X ...」
- 26. 遞歸查詢LDAP組成員資格
- 27. 遞歸查詢來檢查所有父母是否已啓用
- 28. 遞歸檢查員工是否是老闆的方法
- 29. 使用UI技術的網絡技術
- 30. 如何在Python中使用遞歸來收集嵌套列表?
這是一個糟糕的問題。你至少知道遞歸是什麼? –
這不是非常快或C代碼不錯,但@Tom Heard的答案是正確的。在更多的數學/抽象語言如Haskell或其他函數式編程語言中,遞歸更容易。 – Binarian