本文内容参考《数据结构与算法分析——C语言描述》
递归的四条基本法则
- 基准情形。必须总有些基准清醒,它无须递归就能解出(可以理解为加入初始条件)
- 不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使求解状况朝接近基准情形的方向推进。
- 设计法则。假设所有的递归调用都能运行。
- 合成效益法则(compound interest rule)。在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。
题目一
首先我们看一下这个题目
设我们有一个正整数 N 并希望把它打印出来。我们的例程的名字为 PrintOut(N). 假设仅有的现成 I/0 例程将只处理单个数字并将其输出到终端。我们将这个例程命名为 PrintDight; 例如, “PrintDigit(4)”将输出一个 “4” 到终端。
递归对该问题提供一个非常简洁的解。为打印“76234”,然后再打印出“4”.第二步用语句“PrintDigit(N%10)”很容易完成,但是第一步却不比原来的问题简单多少。它实际上是同一个问题,因此我们可以用语句“PrintOut(N/10)”递归地解决它。
下面的程序是Java写的 ,C语言也是一样的思路,没有差别
public