我看到了这个问题,但那里的答案并不十分相关.朋友需要一组解决的递归问题来帮助他明天学习测试.
他从理论上学到了这个问题,但是在掌握如何实际解决递归问题时遇到了问题.您是否知道网络上可用的解决递归问题(最好是C语言,但也可以是C语言语言)的良好来源?
注意 - 函数式语言中的示例在这里没有多大帮助.我的朋友正在参加一场学习比赛明天通过他的考试,而且我确信在这一点上切换语言会让他感到困惑(这可能是教育其他的,压力较小的时候).
学习递归的最佳方法之一是获得一些函数式编程语言的经验,如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 }
重要的是要理解基础案例并不难理解.它必须存在.这是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 }
本文解释了递归,并有一些简单的C示例用于遍历链表和二叉树