一、递推算法的思想
有事不求人,遇到困难自己解决,即使难以解决也要硬着头皮去解决。
二、递归算法的特点
(1)递归过程一般通过函数或子过程来实现。
(2)递归算法在函数或子过程的内部,直接或间接地调用自己的算法。
(3)递归算法实际上是把问题转化为规模缩小的同类子问题,然后再递归调用函数或过程来表示问题的解。
三、实例演练
(1)汉诺塔问题
代码实现:
#include "stdio.h" int move(int n, int x, int y, int z); int main() { int h; printf("输入盘子的个数:");//提示输入盘子的个数 scanf("%d", &h); printf("移动%2d个盘子的步骤如下:\n", h); move(h, 'a', 'b', 'c');//调用前面定义的函数开始移动,依次输出一定的步骤 system("pause"); return 0; } int move(int n, int x, int y, int z) { if (n==1) { printf("%c-->%c\n", x, z); } else { move(n - 1, x, z, y); printf("%c-->%c\n", x, z); { getchar(); move(n - 1, y, x, z); } } return 0; }
实现结果:
(2)阶乘问题
代码实现:
#include "stdio.h" int fact(int n); int main() { int i; printf("请输入要计算阶乘的一个整数:\n"); scanf("%d", &i); printf("%d的阶乘%d!结果为:%d。\n", i, i,fact(i)); system("pause"); return 0; } int fact(int n) { if (n<=1) { return 1; } else { return n*fact(n - 1); } }
实现结果: