久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

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

漢諾塔問題是一個經典的問題。漢諾塔(HanoiTower),又稱河內塔,源于印度一個古老傳說。本文將用Java與C++分別實現,感興趣的可以學習一下

1.漢諾塔介紹

漢諾塔規則

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

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

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

經過研究發現,漢諾塔的破解很簡單,就是按照移動規則向一個方向移動金片: 如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);//規律遞歸 
 }

(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);//規律遞歸
    }
}

(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漢諾塔內容請搜索html5模板網以前的文章希望大家以后多多支持html5模板網!

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

相關文檔推薦

主站蜘蛛池模板: 成人区精品一区二区婷婷 | 成人水多啪啪片 | 亚洲一区二区三区免费视频 | 中文字幕精品一区二区三区精品 | 中文字幕一区在线观看视频 | 亚洲视频免费观看 | 91久色| 久草网免费 | 黑人久久| 亚洲成人中文字幕 | 亚洲精品在线看 | 国产精品视频在线观看 | 一区二区三区日韩 | 国产精品96久久久久久 | 国产欧美精品一区二区三区 | 韩国理论电影在线 | 亚洲日产精品 | 日韩午夜在线播放 | 91精品久久久久久久久 | 美女毛片免费看 | 久久久久国产一区二区三区 | 久久久av | 日韩一区二区三区视频 | 国产精品欧美一区二区三区不卡 | 国产精品久久久久久久午夜 | 日本不卡在线观看 | 国产成人在线免费 | 亚洲国产中文字幕 | 特黄视频 | 97国产超碰 | 精品久久久久久久人人人人传媒 | 国产欧美精品在线观看 | 国产在线区 | 亚洲第一女人av | 一区二区三区电影网 | 久久99网站 | 久久久久久久一区二区三区 | 国产日韩欧美电影 | 在线播放国产视频 | 99在线观看视频 | 国产激情91久久精品导航 |