第二周项目三—体验复杂度(2)

问题及代码:

         汉诺塔问题一直是初学编程语言者来说的一大难题,用递归法来解决汉诺塔问题,并体验盘子数为4、8、16、20、24时在时间消耗上的差异。

#include <stdio.h>
#define discCount 4
long move(int, char, char,char);
int main()
{
    long count;
    count=move(discCount,'A','B','C');
    printf("%d个盘子需要移动%ld次\n", discCount, count);
    return 0;
}

long move(int n, char A, char B,char C)
{
    long c1,c2;
    if(n==1)
        return 1;
    else
    {
        c1=move(n-1,A,C,B);
        c2=move(n-1,B,A,C);
        return c1+c2+1;
    }
}


运行结果:

第二周项目三—体验复杂度(2)_第1张图片

第二周项目三—体验复杂度(2)_第2张图片

第二周项目三—体验复杂度(2)_第3张图片

分析结果:

假设移动一个盘子需要2秒,那么

第二周项目三—体验复杂度(2)_第4张图片

知识点总结:

这个程序运用了递归,程序简单但实际运算量大,所以递归在大的数据计算中相对来说是比较简单的。这的程序也体现了O(2^n)数值变化快的特点。

你可能感兴趣的:(第二周项目三—体验复杂度(2))