汉诺塔python输出移动了多少次?

2023-03-07 16:56:02 4 0
卡卡

导读:今天恰卡编程网来给各位分享关于汉诺塔python输出移动了多少次的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

python语言汉诺塔(hanoi)问题

move(n, A, B) 就表示把第n个饼从A柱移到B柱, 其中step是个全局变量,用来记录移动的次数。

汉诺塔python输出移动了多少次?

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输出移动了多少次的相关内容别忘了在本站进行查找喔。

收藏
分享
海报
0 条评论
4
上一篇:linux常用命令有哪些2023(最新整理linux常用命令大全) 下一篇:Python距离明天还有多久(2023年最新分享)

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码