1.汉诺塔问题:
#include <stdio.h>
void move(char pos1, char pos2) {
printf("%c-->%c ", pos1, pos2);
}
void Hanoi(int n, char pos1, char pos2, char pos3)
{
if (n == 1)
{
move(pos1, pos3);
}
else {
Hanoi(n-1, pos1, pos3, pos2);
move(pos1, pos3);
Hanoi(n-1, pos2, pos1, pos3);
}
}
int main() {
Hanoi(1, 'A', 'B', 'C');
printf("\n");
Hanoi(2, 'A', 'B', 'C');
printf("\n");
Hanoi(3, 'A', 'B', 'C');
}
结果:
A-->C
A-->B A-->C B-->C
A-->C A-->B C-->B A-->C B-->A B-->C A-->C
2.青蛙跳台阶问题:
#include <stdio.h>
int calculate(int m)
{
if (m == 1)
return 1;
if (m == 2)
return 2;
return calculate(m - 1) + calculate(m-2);
}
int main() {
int m = 0;
scanf("%d", &m);
int num = calculate(m);
printf("%d ", num);
return 0;
}
输出结果:
5
8