再帰関数-ハノイの塔
-
定義:関数内で直接または間接的に自分自身を呼び出します。
キーポイント:
再帰関数を定義するときは、「終了条件」を決定する必要があります。!!
使用機会:
特に複雑な問題を扱う場合、直接解決することは困難です。
ただし、この問題をより単純にする方法があります(より単純な問題に変換します)
-
Inceptionを使用して、再帰関数を理解するのに役立ててください
-
再帰関数のデメリット:パフォーマンスが低い!!!
実際の開発では、めったに使用されません!
再帰を使用して、ハノイの塔の問題を解決します
-
ハノイの塔
ルール:真ん中のスティックはアシスタントとして使用できますが、一度に移動できるスティックは1つだけで、大きなスティックを小さなスティックの上に置くことはできません。
この問題を解決するには、プログラムを使用してください。
#include <stdio.h>
void hanoi(int n, char pillar_start[], char pillar_mid[], char pillar_end[]) {
if (n == 1) {
printf("从%s移动到%s\n", pillar_start, pillar_end);
return;
}
hanoi(n - 1, pillar_start, pillar_end, pillar_mid);
printf("从%s移动到%s\n", pillar_start, pillar_end);
hanoi(n - 1, pillar_mid, pillar_start, pillar_end);
}
int main(void) {
char name1[] = "A柱";
char name2[] = "B柱";
char name3[] = "C柱";
int n = 3; //盘子数
hanoi(3, name1, name2, name3);
return 0;
}