学习递归的最佳方法之一是获得一些函数式编程语言的经验,如Haskell或Lisp或Scheme.
因此,找到递归问题可以减少到找到与函数式编程语言相关的一些问题和答案.这是99个lisp问题的例子.
学习Scheme或Lisp只需要5分钟,因此您可以立即开始使用示例,以便明天进行测试.
学习递归的另一个好方法是在涉及归纳的数学证明中进行一些练习.
与递归相关的关键概念:
使用递归,您不需要知道如何解决问题.你只需要知道两件事.1)如何解决问题的最小实例,以及2)如何将其分解成更小的部分.
同样,您只需记住您需要:1)基本案例和2)递归案例.
基本案例处理您想要用最小输入做的事情的单个实例.
递归情况将问题分解为子问题.最终这个子问题将减少到基本情况.
例:
//1+...+n = n*n(+1)/2 = sumAll(n):
int sumAll(int x)
{
if(x == 0) //base case
return 0;
else
return sumAll(x-1) + x; //recursive case
}
Run Code Online (Sandbox Code Playgroud)
重要的是要理解基础案例并不难理解.它必须存在.这是x> 0的等效解决方案:
//1+...+n = n*n(+1)/2 = sumAll(n):
int sumAll(int x)
{
if(x == 1) //base case
return 1;
else
return sumAll(x-1) + x; //recursive case
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20626 次 |
| 最近记录: |