学习日志(十一)

函数递归

递归就是函数自己调用自己,把大事化小的过程

典型递归:求n的阶乘

#include <stdio.h>

int fact(int n) {

if(n==0) {

return 1;

}

else {

return n*fact(n-1);

}

}

int main() {

int n=0;

scanf ("%d",&n);

int ret=fact(n);

printf ("%d\n",ret);

return 0;

}

汉诺塔问题:

汉诺塔问题的设定是这样的:有三根柱子,标记为A、B和C。初始时,所有的盘子按照从大到小的顺序从柱子 A 上方开始堆叠。目标是将这些盘子按照相同的顺序移动到柱子C上,同时满足以下规则:

1.每次只能移动一个盘子。

2.在移动过程中,任何时刻都不能将大盘子放在小盘子上方。

汉诺塔问题的解决方案是使用递归算法。下面是解决汉诺塔问题的一般步骤:

1.当只有一个盘子时,直接将盘子从源柱子移动到目标柱子。

2. 当有多个盘子时,可以将问题分解为三个子问题:a.将前n-1个盘子从源柱子移动到辅助柱子(利用目标柱子作为辅助)。

b.将最后一个盘子从源柱子移动到目标柱子。

c.将前n-1个盘子从辅助柱子移动到目标柱子(利用源柱子作为辅助)。

3.通过递归地应用上述步骤解决子问题。

#include <iostream>

using namespace std;

void move(int n, char x, char y) {

cout << n << ": " << x << " -> " << y << endl;

}

void hanoi(int n, char one, char two, char three) {

if (n == 1) {

move(n, one, three);

} else {

hanoi(n - 1, one, three, two);move(n, one, three);

hanoi(n - 1, two, one, three);

}

}

int main() {

int m;

char a, b, c;

}

全部评论

相关推荐

2024-12-16 11:26
门头沟学院 C++
小米 嵌入式软件开发 22k*15
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务