-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