充分利用自己的递归算法(三)

Posted on 2018-10-25 14:41  时光top  阅读(153)  评论(0编辑  收藏  举报

一、递推算法的思想

  有事不求人,遇到困难自己解决,即使难以解决也要硬着头皮去解决。

二、递归算法的特点

  (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);
    }

}

   实现结果:

  

 

Copyright © 2024 时光top
Powered by .NET 8.0 on Kubernetes