1. 程式人生 > >第二週專案3體驗複雜度 漢諾塔問題

第二週專案3體驗複雜度 漢諾塔問題

問題及程式碼:

/*

copyright (t) 2016,煙臺大學計算機學院

*All rights reserved.

*檔名稱:cpp1.cpp

*作者:張相如

*完成日期:2016年9月8日

*版本號:v1.0

*問題描述:用遞迴演算法求解漢諾塔問題,其複雜度可以求得為O(2^n) ,是指數級的演算法。請到課程主頁下載程式執行一下,體驗盤子數discCount為4、8、16、20、24時在時間耗費上的差異,你能忍受多大的discCount。

*輸入描述:無(盤子數已定義)

*程式輸出:盤子需要移動的次數

*/

#include <stdio.h>
#define discCount 24              //數值分別改為4、8、12、16、20、24並執行結果
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;
    }
}


執行結果:

知識點總結:

演算法的複雜度

心得體會:

在本次測試中,盤子的數量增加,會導致移動次數的增加,根據遞迴的原理,移動次數是以指數級增加的。這導致計算機的運算量急劇增加。當盤子增加到24個時,移動次數已經達到了16777215次,所以計算機無法立即出現結果。本實驗主要是體驗了演算法的複雜度以及對於遞迴思想的理解。

相關推薦

第二專案3體驗複雜 問題

問題及程式碼: /* copyright (t) 2016,煙臺大學計算機學院 *All rights reserved. *檔名稱:cpp1.cpp *作者:張相如 *完成日期:2016年9月8日 *版本號:v1.0 *問題描述:用遞迴演算法求解漢諾塔問題,

第二專案3 體驗複雜

問題描述及程式碼: /* *煙臺大學計控學院 *作 者:楊徵 *完成日期:2015年9月11日 *問題描述:有一個印度的古老傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從

第二-專案3 體驗複雜-問題

問題及程式碼: /* *Copyright (c) 2016, 煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:s3 *作 者:孫麗瑋 *完成日期:2016年9月6日 *問題描述:有一個印度的古老傳說:在世界中心貝拿勒

第二專案4 體驗複雜---

/* * 煙臺大學計算機與控制工程學院 *檔名稱:main.cpp *作 者:王旭 *完成日期:2015年9月12日 *版 本 號:v

第二專案3-體驗複雜(2)

問題及程式碼: /* *煙臺大學計算機與控制工程學院 *檔名稱:lulu.cpp *作 者:蘆亞茹 *完成日期:2015年9月13日 *問題描述:漢諾塔 *輸入描述:無 *程

第二專案3 體驗複雜

#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXNUM 100000 void quicksort(int data[],int first,int last) { int i,

第二 專案3(2)--體驗複雜---

/* *Copyright (c)2016,煙臺大學計算機學院 *All rights reserved. *檔名稱:傳寫.cpp *作者:李欣 *完成日期:2016年9月8日 *版本號:v1.0 * *問題描述:用遞迴演算法求解漢諾塔問題,體驗盤子數為4、8、16、20、24時在時間耗費

第二 體驗複雜--

/* *Copyright(c)2014,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:test.cpp *作者:楊珺 *完成日期:2015年9月7日 *版本號:v1.0 *問題描述:有一個印度的古老傳說:在世界中心貝拿勒

第三專案三-體驗複雜2(問題)

/* *Copyright (c) 2017, 煙臺大學計算機學院 *All rights reserved. *檔名稱:zha.cpp *作者:張思琦 *完成日期:2017年9月13日 *版 本 號:v1.0 * *問題描述:漢諾塔問題(計算移動n個盤子需要

第二——專案3複雜體驗(2)

/* *Copyright (c++) 2015,煙臺大學計算機學院 *All rights reserved. *檔名稱:hut.cpp *作者:商文軻 *完成日期:2014年9月17日 *版本號:vc6.0 *問題描述:用

第二專案3複雜體驗

<pre class="cpp" name="code">01./* 02.*Copyright (c)2015,煙臺大學計算機與控制工程學院 03.*All rights reserved. 04.*檔名稱:漢諾塔.cbp 05.*作 者:李涵睿

第二專案3體驗複雜

(1)兩種排序演算法的執行時間 提供兩種排序演算法,複雜度為O(n 2  )的選擇排序selectsort,和複雜度為O(nlogn) 的快速排序quicksort,在main函式中加入了對執行時間的統計。 利用一個將近10萬條資料的檔案作為輸入資料執行程式,感受兩種演算

第二-專案3

            #include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXNUM 100000 void selectsort(int a[], in

第十二專案3 - 圖遍歷演算法實現(2)

/*Copyright (c) 2015, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:H1.cpp * 作者:辛志勐 * 完成日期:2015年11月23日 * 版本號:VC6.0 * 問題描述:廣度優先遍歷——BFS * 輸入描述:無 * 程式輸出:圖的

第十二專案3 - 圖遍歷演算法實現(1)

/*Copyright (c) 2015, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:H1.cpp * 作者:辛志勐 * 完成日期:2015年11月23日 * 版本號:VC6.0 * 問題描述:實現圖遍歷演算法,輸出圖結構的深度優先(DFS)遍歷序列

資料結構第二 專案2程式的多組織檔案

**問題及程式碼: /* *(1) .h 標頭檔案:定義資料型別、宣告自定義函式、定義巨集等 *(2).cpp 原始檔1:用於實現標頭檔案中宣告的自定義函式 *(3).cpp 原始檔2:定義main()函式,用於呼叫相關函式,實現問題求解目標。 *標頭檔案

第12周專案3--移動步驟(遞迴函式)

問題及程式碼: /* *Copyright (c)2014,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:hannuota.cpp *作 者:單昕昕 *完成日期:2014年11月13日 *版 本 號:v1.0 *

演算法之時間複雜計算

 設a, b, c是3個塔座:開始時,塔座a上有n個自上而下、由小到大地疊在一起圓盤,各圓盤從小到大編號為1, 2, …, n,現要求將塔座a上的這一疊圓盤移到塔座b上,並仍按同樣順序疊置,移動圓盤時遵守以下移動規則: 規則1:每次只能移動1個圓盤; 規則2:不允許將較大的圓

第十一 專案 3 點類派生直線類 .

#include <iostream> #include<Cmath> using namespace std; class Point{ public: Point():x(0),y(0){}; Point(double x0,do

第五專案3-時間類(2)修改

修改原因:在上一篇博文中第五週專案3-時間類(2)中提交的程式碼存在一些問題:  (1) 老師給出的程式碼中,輸入60或24也算作合法時間,但是在現實生活中並不存在這樣的時間,所以要把程式碼改一下; (2)當輸入的要增加的秒,分,小時數加上原本的時,分,秒數大於60或者24