アルゴリズム分析と設計コースの実験 - ハノイの塔問題を解決するための再帰的アルゴリズム

シリーズ記事の目次

第 1 章 アルゴリズムの解析と再帰的アルゴリズムの設計


シリーズ記事の目次


序文

  1. 再帰的アルゴリズムの基本的な考え方と実装方法をマスターします。
  2. 実験ケースにおけるアルゴリズム設計のアイデアを理解します。

1. タスクの説明

ハノイの塔問題。初期状態では、すべての円盤が柱 B にあり、柱 A に移動する必要があります。

2. 実験プロセス

有名なハノイ塔の問題は誰もが知っていますが、それをコードに実装するにはどうすればよいでしょうか?

最初の一歩

関数 hanoi() を定義し、それに 3 つの変数を挿入します。これらの 3 つの変数は、それぞれピラー A、ピラー B、ピラー C を表します。

void hanoi(int n,char a,char b,char c)
{//把n个盘子从a柱移动到c柱
	if(n>0)
	{
		hanoi(n-1,a,c,b);//n-1个盘子从a移动到b
		printf("%c->%c\n",a,c);//1个盘子从a移动到c
		hanoi(n-1,b,a,c);//n-1个盘子从b移动到c
	}
	
}  

 ステップ2

main 関数で hanoi() 関数を呼び出すことにより、操作が実行されます。

int main()
{
    int n = 3;    // 假设有3个盘子
    hanoi(n, 'B', 'A', 'C');
    return 0;
}

第三段階

全体のコードは次のとおりです。

#include <iostream>
using namespace std;
void hanoi(int n,char a,char b,char c)
{//把n个盘子从a柱移动到c柱
	if(n>0)
	{
		hanoi(n-1,a,c,b);//n-1个盘子从a移动到b
		printf("%c->%c\n",a,c);//1个盘子从a移动到c
		hanoi(n-1,b,a,c);//n-1个盘子从b移动到c
	}
	
}  

int main()
{
    int n = 3;    // 假设有3个盘子
    hanoi(n, 'B', 'A', 'C');
    return 0;
}

要約する

以上が今日お話しする内容ですが、この記事では再帰アルゴリズムについて簡単に紹介するだけですが、この考え方を利用することで多くの複雑な問題を単純化することができます。

おすすめ

転載: blog.csdn.net/m0_62422680/article/details/129778183