最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java與C++分別用遞歸實現漢諾塔詳解

 更新時間:2022年05月19日 09:31:59   作者:Demo龍  
漢諾塔問題是一個經典的問題。漢諾塔(Hanoi Tower),又稱河內塔,源于印度一個古老傳說。本文將用Java與C++分別實現,感興趣的可以學習一下

1.漢諾塔介紹

漢諾塔規(guī)則

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

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

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

經過研究發(fā)現,漢諾塔的破解很簡單,就是按照移動規(guī)則向一個方向移動金片: 如3階漢諾塔的移動: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++實現(遞歸結果及顯示步驟)

(1)遞歸結果

#include<iostream>
using namespace std;
int H_tower(int num);
int main()
{
	int num;
	cout<<"請輸入需要移動的盤子數"<<endl;
	cin>>num;
	cout<<H_tower(num)<<endl;
 }
 int H_tower(int num)
 {
 	if(num<1)
	 {
	 	cout<<"請輸入大于等于一的數"<<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<<"請輸入需要移動的盤子數"<<endl;
	cin>>num;
	hannuo(3);
 }
 void hannuo(int num)
 {
 	if(num<1)
 	{
 			cout<<"請輸入大于等于一的數"<<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++;
 		//圓盤只有一個時,只需將其從A塔移到C塔
		cout << "第 "<<sum<<" 次move " << num << " from " << A << " to " << C << endl;
	 }
	else
	{
		Move(sum,num - 1, A, C, B);//遞歸,把A塔上編號1~n-1的圓盤移到B上,以C為輔助塔
		sum++;
		cout << "第 "<<sum<<" 次move " << num << " from " << A << " to " << C << endl;//把A塔上編號為n的圓盤移到C上
		Move(sum,num - 1, B, A, C);//遞歸,把B塔上編號1~n-1的圓盤移到C上,以A為輔助塔
	}
  } 

4.Java實現(遞歸結果及顯示步驟)

(1)遞歸結果

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("請輸入需要移動的盤子數");
        num= sc.nextInt();
        tower t=new tower();
        System.out.println("需要移動的次數 = "+t.H_tower(num));
    }
}

tower.java

public class tower {
    public int H_tower(int num) {
        if (num < 1) {
            System.out.println("請輸入大于等于一的數" );
        }
        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("請輸入需要移動的盤子數");
        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("請輸入大于等于一的數");
        }
        int sum[]={0};
        Move(num,'A','B','C');
    }
    public void Move(int num,char A,char B,char C)
    {
        if(num==1)
        {
            //圓盤只有一個時,只需將其從A塔移到C塔
            System.out.println(" move " + num + " from " + A + " to " + C );
        }
        else
        {
            Move(num - 1, A, C, B);//遞歸,把A塔上編號1~n-1的圓盤移到B上,以C為輔助塔
            System.out.println(" move " + num + " from " + A + " to " + C );//把A塔上編號為n的圓盤移到C上
            Move(num - 1, B, A, C);//遞歸,把B塔上編號1~n-1的圓盤移到C上,以A為輔助塔
        }
    }
}

到此這篇關于Java與C++分別用遞歸實現漢諾塔詳解的文章就介紹到這了,更多相關Java漢諾塔內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談Mybatis版本升級踩坑及背后原理分析

    淺談Mybatis版本升級踩坑及背后原理分析

    這篇文章主要介紹了淺談Mybatis版本升級踩坑及背后原理分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 線程池之exectue與submit的區(qū)別及說明

    線程池之exectue與submit的區(qū)別及說明

    這篇文章主要介紹了線程池之exectue與submit的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java中Struts2文件上傳問題詳解

    java中Struts2文件上傳問題詳解

    文件上傳和文件下載是我們在web應用程序中常用的兩個功能,在java中,實現這兩種功能的方式也有很多種,其中struts2就給我們提供了一種算是比較簡單的方式吧,下面我們就一起來看一下,
    2015-07-07
  • Java類加載器和類加載機制實例分析

    Java類加載器和類加載機制實例分析

    這篇文章主要介紹了Java類加載器和類加載機制,結合實例形式分析了java類加載器與類加載機制原理、實現方法及相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • Java中的迭代器和foreach原理

    Java中的迭代器和foreach原理

    這篇文章主要介紹了Java中的迭代器和foreach原理,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09
  • MyBatisPlus中@TableField注解的基本使用

    MyBatisPlus中@TableField注解的基本使用

    這篇文章主要介紹了MyBatisPlus中@TableField注解的基本使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Mybatis查不到數據查詢返回Null問題

    Mybatis查不到數據查詢返回Null問題

    mybatis突然查不到數據,查詢返回的都是Null,但是 select count(*) from xxx查詢數量,返回卻是正常的。好多朋友遇到這樣的問題不知所措,下面小編通過本教程簡單給大家說明下
    2016-08-08
  • Java使用多線程處理未知任務數的方案介紹

    Java使用多線程處理未知任務數的方案介紹

    這篇文章主要為大家詳細介紹了Java如何使用多線程實現處理未知任務數,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03
  • Java中的內存泄露問題和解決辦法

    Java中的內存泄露問題和解決辦法

    大家好,本篇文章主要講的是Java中的內存泄露問題和解決辦法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Java?8函數式接口之Consumer用法示例詳解

    Java?8函數式接口之Consumer用法示例詳解

    這篇文章主要為大家介紹了Java?8函數式接口之Consumer用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論

礼泉县| 武城县| 弋阳县| 邯郸市| 安图县| 宜阳县| 阳山县| 泌阳县| 商城县| 澜沧| 璧山县| 桂阳县| 常熟市| 平度市| 五大连池市| 厦门市| 梅州市| 华安县| 章丘市| 嘉善县| 砀山县| 林甸县| 海伦市| 离岛区| 腾冲县| 剑河县| 永川市| 垫江县| 诸暨市| 大方县| 上犹县| 游戏| 四川省| 新民市| 邓州市| 托克逊县| 蒙自县| 东海县| 湛江市| 丽江市| 宜兰县|