Loading

JAVA汉罗塔和C语言汉罗塔实例

前言

刚刚在安装clion的时候,突然想到学习C语言的时候,汉罗塔用到的递归。为了巩固一下递归的知识,自己决定用JAVA也写一个递归试试。同时我也用C写了一个汉罗塔的递归。层数初步设为25步,然后在运行的时候我用time命令(LINUX中的一个命令)对二者的运行时间进行统计。

JAVA
代码
/**
 * 用JAVA实现汉罗塔
 * 递归复习
 * ASorb
 */

public class Hannota{
    int floor = 25;
    static int i = 0;       //计数器
    //移动塔层
    void moveH(char markA,char markB,char markC,int floor){
        if (floor == 1)      //只有一层直接移动
            printfS(markA , markC);
        else{
            moveH(markA,markC,markB,floor - 1);
            printfS(markA,markC);
            moveH(markB,markA,markC,floor - 1);
        }
    }
    //打印移动信息
    void printfS(char markA,char markB){
        System.out.println("第"+(++i)+"步:"+markA+"->"+markB);
    }

    public static void main(String[] args){
        Hannota h = new Hannota();
        h.moveH('A','B','C',h.floor);
    }
}

结果图

C语言汉罗塔

C语言
代码
/**
 * 用C实现汉罗塔
 * 递归调用
 * ASorb
 */

#include<stdio.h>
//打印移动信息
void printfS(char markA,char markB){
    static int i = 0;       //计数器
    printf("第%d步:%c->%c\n",++i,markA,markB);
}
//移动塔层
void moveH(char markA,char markB,char markC,int floor){
    if(floor == 1)
        printfS(markA,markC);
    else{
        moveH(markA,markC,markB,floor - 1);
        printfS(markA,markC);
        moveH(markB,markA,markC,floor - 1);
    }
}

int main(){
    int floor = 25;     //层数
    moveH('A','B','C',floor);
    return 0;
}

结果图

C语言汉罗塔

END

我们从截图中可以看到移动25层塔需要33554431步,对于时间的统计只是个人觉得好玩。当然不可否认的是C确实会比JAVA快,但是这C在某些方面会比JAVA强大。毕竟一个C语言是“面向过程”,而JAVA是“面向对象”语言。

原文地址:https://www.orbpi.cn/2019/cjtfmxeaf000djs73t0lpiscb.html#more

posted @ 2019-03-19 18:32  CPoet  阅读(181)  评论(0)    收藏  举报