我觉得你提到的让学生理解循环、递归调用有道理,但是例子真是不咋滴啊,这种教学方法会让学生以为,计算机就是暴破用的,凡是问题来了就是穷举。建议换些例子来讲循环递归这种概念。试举两例:
1、k-sum问题,实际讲2-sum,然后让学生自己去思考3-sum或者更往上:给一个数组,然后给一个目标数,试从数组里面找出k个不同的数使得其和等于目标数。 可以让学生练习简单的循环。
2、再有就是斐波那契数列问题了,可以从很多角度理解这个问题:递归(复杂度?递归如何层序展开?最后如何收敛?)、非递归(如何把递归展开?)、自顶向下和自底向上的差异等等。这个问题虽然很多书上有讲,虽然看起来土,但是简单明了,也便于数学推导、树形表示(完全二叉树到简化的DAG,图形上说明为何不同策略性能差异很大)、堆栈画图(堆栈如何一步步压入和弹出的,怎么就最后对应到了递归的最终结果上了?),能够看出很多基本的编程思路问题。
【 在 roy 的大作中提到: 】
: 组合就是1..5里面任意取3个数(可以重复),有多少种不同取法?
: 排列就是不允许重复。
: 穷举法的基础就是找出所有的组合。
: ...................