再帰の概念と、各呼び出しで再帰がどのように積み重なっていくかを理解しています。しかし、printf コマンドで区切られた 2 つの関数呼び出しがある場合に、再帰呼び出しがどのように機能し、出力されるかを説明できません。この再帰呼び出しがどのように機能するかを誰かに説明してもらえますか?
「タワーズ オブ ハノイ」というゲームに関する例を見つけました。Ut は再帰の例として使用されました。コード:
#include <stdio.h>
void transfer(int n, char from, char to, char temp);
int main()
{
int n;
printf("how many disk");
scanf("%d", &n);
printf("\n");
transfer(n, 'L', 'R', 'C');
return 0;
}
/*
* n = number of disk,
* from = origin,
* to = destination,
* temp = temporary storage
*/
void transfer(int n, char from, char to, char temp)
{
if (n > 0) {
// Move n-1 disks from origin to temporary
transfer(n - 1, from, temp, to);
// Move n th disk from origin to destination
printf("move disk %d from %c to %c\n", n, from, to);
// Move n-1 disks from temporary to destination
transfer(n - 1, temp, to, from);
}
}
n=3
このような出力が得られるため
ディスク 1 を L から R に移動 // ディスク 2 を L から C に移動 // ディスク 1 を R から C に移動 // ディスク 3 を L から R に移動 // ディスク 1 を C から L に移動 // ディスク 2 を C から R に移動 // ディスク 1 を L から R に移動 //