pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Java與C++分別用遞歸實(shí)現(xiàn)漢諾塔詳解

漢諾塔問(wèn)題是一個(gè)經(jīng)典的問(wèn)題。漢諾塔(HanoiTower),又稱河內(nèi)塔,源于印度一個(gè)古老傳說(shuō)。本文將用Java與C++分別實(shí)現(xiàn),感興趣的可以學(xué)習(xí)一下

1.漢諾塔介紹

漢諾塔規(guī)則

1.有三根桿子A,B,C。A桿上有若干碟子

2.每次移動(dòng)一塊碟子,小的只能疊在大的上面

3.把所有碟子從A桿全部移到C桿上

經(jīng)過(guò)研究發(fā)現(xiàn),漢諾塔的破解很簡(jiǎn)單,就是按照移動(dòng)規(guī)則向一個(gè)方向移動(dòng)金片: 如3階漢諾塔的移動(dòng):A→C,A→B,C→B,A→C,B→A,B→C,A→C

2.解塔步驟

圓盤:12345 柱子:ABC

1→C,2→B,1→B,3→C,1→A,2→C,1→C,4→B; 1→B,2→A,1→A,3→B,1→C,2→B,1→B,5→C; 1→A,2→C,1→C,4→A,1→B,2→A,1→A,4→C; 1→C,2→B,1→B,3→C,1→A,2→C,1→C,完成!

3.C++實(shí)現(xiàn)(遞歸結(jié)果及顯示步驟)

(1)遞歸結(jié)果

#include<iostream>
using namespace std;
int H_tower(int num);
int main()
{
	int num;
	cout<<"請(qǐng)輸入需要移動(dòng)的盤子數(shù)"<<endl;
	cin>>num;
	cout<<H_tower(num)<<endl;
 }
 int H_tower(int num)
 {
 	if(num<1)
	 {
	 	cout<<"請(qǐng)輸入大于等于一的數(shù)"<<endl;
		 exit(-1); //輸入不合法,退出程序 
	  } 
	if(num==1)
	{
		return 1;
	}
	return (2*H_tower(num-1)+1);//規(guī)律遞歸 
 }

(2)顯示步驟

#include<iostream>
using namespace std;
 void hannuo(int num);
 void Move(int &sum,int num,char A,char B,char C);
 int main()
 {
 		int num;
	cout<<"請(qǐng)輸入需要移動(dòng)的盤子數(shù)"<<endl;
	cin>>num;
	hannuo(3);
 }
 void hannuo(int num)
 {
 	if(num<1)
 	{
 			cout<<"請(qǐng)輸入大于等于一的數(shù)"<<endl;
		 exit(-1); //輸入不合法,退出程序 
	 }
	 int sum=0;
	 Move(sum,num,'A','B','C');
 }
 void Move(int &sum,int num,char A,char B,char C)
 {
 	if(num==1)
 	{
 		sum++;
 		//圓盤只有一個(gè)時(shí),只需將其從A塔移到C塔
		cout << "第 "<<sum<<" 次move " << num << " from " << A << " to " << C << endl;
	 }
	else
	{
		Move(sum,num - 1, A, C, B);//遞歸,把A塔上編號(hào)1~n-1的圓盤移到B上,以C為輔助塔
		sum++;
		cout << "第 "<<sum<<" 次move " << num << " from " << A << " to " << C << endl;//把A塔上編號(hào)為n的圓盤移到C上
		Move(sum,num - 1, B, A, C);//遞歸,把B塔上編號(hào)1~n-1的圓盤移到C上,以A為輔助塔
	}
  } 

4.Java實(shí)現(xiàn)(遞歸結(jié)果及顯示步驟)

(1)遞歸結(jié)果

hannuo.java

import java.util.Scanner;
public class hannuo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num;
        System.out.println("請(qǐng)輸入需要移動(dòng)的盤子數(shù)");
        num= sc.nextInt();
        tower t=new tower();
        System.out.println("需要移動(dòng)的次數(shù) = "+t.H_tower(num));
    }
}

tower.java

public class tower {
    public int H_tower(int num) {
        if (num < 1) {
            System.out.println("請(qǐng)輸入大于等于一的數(shù)" );
        }
        if (num == 1) {
            return 1;
        }
        return (2 * H_tower(num - 1) + 1);//規(guī)律遞歸
    }
}

(2)顯示步驟

hannuo.java

import java.util.Scanner;
public class hannuo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num;
        System.out.println("請(qǐng)輸入需要移動(dòng)的盤子數(shù)");
        num= sc.nextInt();
        tower t=new tower();
        t.hannuo(num);
    }
}

tower.java

public class tower {
    public void hannuo(int num)
    {
        if(num<1)
        {
            System.out.println("請(qǐng)輸入大于等于一的數(shù)");
        }
        int sum[]={0};
        Move(num,'A','B','C');
    }
    public void Move(int num,char A,char B,char C)
    {
        if(num==1)
        {
            //圓盤只有一個(gè)時(shí),只需將其從A塔移到C塔
            System.out.println(" move " + num + " from " + A + " to " + C );
        }
        else
        {
            Move(num - 1, A, C, B);//遞歸,把A塔上編號(hào)1~n-1的圓盤移到B上,以C為輔助塔
            System.out.println(" move " + num + " from " + A + " to " + C );//把A塔上編號(hào)為n的圓盤移到C上
            Move(num - 1, B, A, C);//遞歸,把B塔上編號(hào)1~n-1的圓盤移到C上,以A為輔助塔
        }
    }
}

到此這篇關(guān)于Java與C++分別用遞歸實(shí)現(xiàn)漢諾塔詳解的文章就介紹到這了,更多相關(guān)Java漢諾塔內(nèi)容請(qǐng)搜索html5模板網(wǎng)以前的文章希望大家以后多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

主站蜘蛛池模板: uv机-uv灯-uvled光固化机-生产厂家-蓝盾机电 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 陕西高职单招-陕西高职分类考试网| 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 磷酸肌酸二钠盐,肌酐磷酰氯-沾化欣瑞康生物科技| 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 太阳能发电系统-太阳能逆变器,控制器-河北沐天太阳能科技首页 | 维泰克Veertek-锂电池微短路检测_锂电池腐蚀检测_锂电池漏液检测 | 郑州外墙清洗_郑州玻璃幕墙清洗_郑州开荒保洁-河南三恒清洗服务有限公司 | 茅茅虫AI论文写作助手-免费AIGC论文查重_写毕业论文降重 | 3d打印服务,3d打印汽车,三维扫描,硅胶复模,手板,快速模具,深圳市精速三维打印科技有限公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 英超直播_英超免费在线高清直播_英超视频在线观看无插件-24直播网 | 深圳成考网-深圳成人高考报名网 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 电缆接头_防水接头_电缆防水接头 - 乐清市新豪电气有限公司 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 红外光谱仪维修_二手红外光谱仪_红外压片机_红外附件-天津博精仪器 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | IP检测-检测您的IP质量| 广西正涛环保工程有限公司【官网】 | 葡萄酒灌装机-食用油灌装机-液体肥灌装设备厂家_青州惠联灌装机械 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 写方案网_方案策划方案模板下载| loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 金属清洗剂,防锈油,切削液,磨削液-青岛朗力防锈材料有限公司 | 陕西鹏展科技有限公司| 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 |