导读:今天恰卡编程网来给各位分享关于汉诺塔python输出移动了多少次的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
python语言汉诺塔(hanoi)问题
move(n, A, B) 就表示把第n个饼从A柱移到B柱, 其中step是个全局变量,用来记录移动的次数。
hanoi(n, A, B, C) 就是你所问的实现递归的函数, 表示把n个饼从A柱通过B柱移到C柱。
其中 n==1 是递归的最基本的情况, 如果只有一个饼就直接移到目标柱子即可。
不然呢我们就先把最上面n-1个饼从A通过C移到B,注意这里移到的是B柱哦~, 然后把第n块饼移到C柱,再重新把之前移到B柱上的n-1个饼通过A移动到C。
整个过程挺直白的,想通了就明白了
c++汉诺塔怎么输出每次移动是第几次移动?
我使用了一个全局变量count来计量次数:
#include cstdio
using namespace std;
int count = 1;
void hanoi(int d, char from, char to, char others);
int main()
{
int d;
scanf("%d", d);
hanoi(d, 'a', 'b', 'c');
return 0;
}
void hanoi(int d, char from, char to, char others)
{
if(d == 1)
{
printf("Number %d action: %c----%c.\n", count, from, to);
count++;
return;
}
hanoi(d - 1, from, others, to);
hanoi(1, from, to, others);
hanoi(d - 1, others, to, from);
return;
}
全局变量是无论在主函数还是子函数都能读取,修改的变量
汉诺塔移动几次?
1层:1次
2层:3次
3层:7次
4层:15次
5层:31次
6层:63次
7层:127次
8层:255次
9层:511次
计算公式:f(x)=2^x-1
扩展资料
计算公式推导过程如下:
假设有n个圆盘,移动次数为f(n),根据经验,f(1)=1,f(2)=3
以3层为例,进行推导。可把整个过程分成三步,其中三个圆盘分别用A、B、C、代替且A的半径B的半径C的半径
1、把A、B移到中间的柱子,需要f(2)步
2、把C移动到第三根柱子,需要1步
3、把A、B再移动到第三根柱子,需要f(2)步
所以f(3)=f(2)+1+f(2)=7
同理,当圆盘数量为4时,三个步骤分别需要f(3)步、1步、f(3)步,即f(4)=f(3)+1+f(3)=15
由此可得递推公式:f(x+1)=2*f(x)+1
进一步可以通项公式:f(x)=2^x-1
参考资料来源:百度百科-汉诺塔
python汉诺塔算法如何添加统计移动次数的代码?
方案1:命令窗口运行文件方式
s=0
def move(n,a,b,c):
global s
if n==1:
s=s+1
print(a,'--',c)
return
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
n = int(input('num: '))
move(n,'A','B','C')
print('total: %s'%s)
方案2:交互模式(建立函数文件jichu.py,在交互窗口调用文件中函数move)
s=0
def move(n,a,b,c):
global s
if n==1:
s=s+1
print(a,'--',c,'\t%s' % s)
return
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
汉诺塔移动次数
#includestdio.h
int main()
{
int n;
printf("请输入汉诺塔的金片数: ");
scanf("%d",n);
void hanoi(int n, int a, int b, int c, int step);
int step = 0;
hanoi(n,1,2,3, step);
printf("移动了%d次\n", step);
return 0;
}
void hanoi(int n, int a, int b, int c, int step)
{
if (n==0)
return;
if (n==1)
{
printf("%d - %d\n\n",a,c);
step++;
}
else
{
hanoi(n-1,a,c,b, step);
printf("%d - %d\n\n",a,c);
step++;
hanoi(n-1,b,a,c, step);
}
}
结语:以上就是恰卡编程网为大家整理的关于汉诺塔python输出移动了多少次的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于汉诺塔python输出移动了多少次的相关内容别忘了在本站进行查找喔。
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~