拥有64张光盘的河内之塔递归求解需要多长时间? C ++

时间:2019-04-03 20:39:39

标签: c++

我正在看河内程序的递归塔,该函数的调用次数为2 ^ n-1次。我的室友问我,建造64座塔楼需要多长时间。老实说,我不知道答案,所以我希望有人能在这里帮助我,因为我对答案感兴趣,而不是仅仅等待它

Big-O表示法又是什么?

这是我正在查看的代码:

void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod) 
{ 
    if (n == 1) 
    { 
        printf("\n Move disk 1 from rod %c to rod %c", from_rod, to_rod); 
        return; 
    } 
    towerOfHanoi(n-1, from_rod, aux_rod, to_rod); 
    printf("\n Move disk %d from rod %c to rod %c", n, from_rod, to_rod); 
    towerOfHanoi(n-1, aux_rod, to_rod, from_rod); 
} 

int main() 
{ 
    int n = 4; // Number of disks 
    towerOfHanoi(n, 'A', 'C', 'B');  // A, B and C are names of rods 
    return 0; 
}

从GeeksforGeeks.org获得了代码

3 个答案:

答案 0 :(得分:3)

好吧,您知道高度为n的塔需要2 n-1 次通话,这些通话大约需要相同的时间。

因此,将其计时一些不太大的n,并根据您想要的n进行设置。

等待要解决的高度为64的塔需要太长时间才能直接测量。

关于big-Oh,您知道步数,所以只需删除恒定因子和增长缓慢的项即可。

答案 1 :(得分:1)

根据游戏的起源,这将一直持续到我们所居住的宇宙的尽头:https://en.wikipedia.org/wiki/Tower_of_Hanoi

  

这个难题是法国数学家爱德华·卢卡斯(ÉdouardLucas)发明的   1883年。有一个关于喀什威斯瓦纳特(Kashi Vishwanath)印度庙宇的故事,其中有一间大房间,里面放着三个破旧的柱子,   被64个金色磁盘包围。婆罗门神父执行命令   一个古老的预言,一直在按照   自那时以来,奉奉梵天不变的规则。难题是   因此也被称为梵天之塔。根据   传说,拼图的最后一步完成后,世界将会   结束。

答案 2 :(得分:0)

“这将花费多长时间解决”不是一个有用的问题;它完全取决于在其上编译和运行代码的系统的处理能力。

“河内之塔的递归实现是什么?”是绝对可以解决的。计算时您会发现,计算出的结果为O(2 ^ n),其中n是您拥有的磁盘数。

您可以在这里找到有关为ToH计算Big O的很好的讨论:Discussion/proof