【发布时间】:2013-07-10 18:45:10
【问题描述】:
为了理解贪婪方法和动态规划等高级算法概念,首先需要精通递归。
我对递归比较陌生。每当提出问题时,首先想到的就是使用迭代的解决方案。尽管我知道递归方法的含义以及它是如何工作的,但以递归的方式思考是非常困难的。
请回答以下问题以提供帮助:
1) 任何迭代方法都可以用递归代替吗?
例如,如何递归打印大小为n的数组中的元素?
for i 0 to n
Print a[i]
2) 如何递归解决问题?步骤是什么?是否有任何提示可以确定问题可以递归解决?
例如:如果要求打印出一个字符串的所有子字符串
INPUT: CAT
OUTPUT: CAT,CA,A,AT,T
我可以快速想出一个迭代的方式。使用两个循环可以解决问题。
但是如何递归地解决它。如何确定一个问题可以递归地解决。
如果我的第一个问题的答案是肯定的,那么使用两次递归而不是迭代可以解决我的问题吗?
3) 谁能建议我一些材料/资源来彻底理解递归的概念?
【问题讨论】:
-
你有一袋信和一条街的房子。你是说“对于每一所房子,检查堆顶的信件,然后交付,然后继续下一个房子”还是你说,“将第一组信件交付到街道上的第一所房子,从街道上移走那所房子,并重复,直到街上没有房子”?
-
并不是每个问题在递归中都有意义——从数组中打印元素就是一个很好的例子,这更适合纯迭代。从 多维 数组中打印元素可能更适合递归方法
标签: string algorithm recursion iteration tail-recursion