Я понимаю концепцию рекурсии и то, как она складывается с каждым вызовом. Но я не могу объяснить, как работают рекурсивные вызовы и печатается, когда есть два вызова функции, разделенные командой printf. Может ли кто-нибудь объяснить мне, как работает этот рекурсивный вызов?Нужно объяснение рекурсивных вызовов в «Башнях Ханоя»
Я нашел пример игры «Башни Ханоя». В качестве примера рекурсии использовался 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
дает выход как этот
move disk 1 from L to R // move disk 2 from L to C // move disk 1 from R to C // move disk 3 from L to R // move disk 1 form C to L // move disk 2 from C to R // move disk 1 from L to R //
Выполните шаг за шагом с небольшим количеством дисков (<= 4). Единственная трудная часть понимания ToH-рекурсии - это * привязки *, чередующиеся в стеке вызовов. Что касается печати, то рекурсивные вызовы fore и корма не меняют, что 'n',' to', 'from' и' temp' находятся в * текущем * кадре. И, честно говоря, есть намного более простые примеры рекурсии, чтобы обернуть голову, чем ToH. – WhozCraig