n階漢諾塔c語言,漢諾塔c語言程序詳解

本文目錄一覽:

C語言漢諾塔

要看懂遞歸程序,往往應先從最簡單情況看起。

先看hanoi(1, one, two, three)的情況。這時直接將one柱上的一個盤子搬到three柱上。注意,這裡one柱或three柱到底是A、B還是C並不重要,要記住的是函數第二個參數代表的柱上的一個盤被搬到第四個參數代表的柱上。為方便,將這個動作記為:

one =》three

再看hanoi(2, one, two, three)的情況。考慮到hanoi(1)的情況已經分析過了,可知這時實際上將產生三個動作,分別是:

one =》two

one =》three

two =》three

很顯然,這實際上相當於將one柱上的兩個盤直接搬到three柱上。

再看hanoi(3, one, two, three)的情況。分析

hanoi(2, one , three, two)

one =》three

hanoi(2, two, one, three)

即:先將one柱上的兩個盤搬到two柱上,再將one柱上的一個盤搬到three柱上,最後再將two柱上的兩個盤搬到three柱上。這不就等於將one柱上的三個盤直接搬到three柱上嗎?

運用歸納法可知,對任意n,

hanoi(n-1, one , three, two)

one =》three

hanoi(n-1, two, one, three)

就是先將one柱上的n-1個盤搬到two柱上,再將one柱上的一個盤搬到three柱上,最後再將two柱上的n-1個盤搬到three柱上。這就是我們所需要的結果!

c語言漢諾塔.

#includestdio.h

void hanoi(int n,char A,char B,char C)

{

if(n==1)

{

printf(“Move disk %d from %c to %c\n”,n,A,C);

}

else

{

hanoi(n-1,A,C,B);

printf(“Move disk %d from %c to %c\n”,n,A,C);

hanoi(n-1,B,A,C);

}

}

int main()

{

int n;

printf(“請輸入數字n以解決n階漢諾塔問題:\n”);

scanf(“%d”,n);

hanoi(n,’A’,’B’,’C’);

return 0;

}

c語言 漢若塔的代碼

漢諾塔是一種典型的遞歸思想。

以這例子來說,就是如果想把N個盤子從A移到C,就先把最上面的N-1盤子從A移到B,然後把最底邊的盤子移到C, 再把B里的盤子移到C。

這種思想,舉個例子。讓你求1+2+3+。。。。。。+N。

遞歸思想的解法是,如果我知道n-1個數的和,那麼式子的和就是Sn-1 + N;

寫個函數就是:

int sum(int n) {

    if (n == 1) {

        return 1;    // 結束條件,沒有這個條件,函數永遠不會結束。

    } else {

        return sum(n-1) + n;  // n-1個數的和 再加上n

    }

}

你要理解了這種思想,就能理解漢諾塔的問題了。

C語言漢諾塔程序

將以下內容全部複製到新建的源文件中:(本人自己寫的,因為你那課本上的代碼,沒解釋,書寫不規範,很難理解清楚,所以我直接新寫了一個完整的代碼,附帶詳細說明)

#include stdio.h

//漢諾塔x層塔從A塔整體搬到C塔,中間臨時B塔。

//x層塔是從大到小往上疊放。每次移動只能移動一層塔。並且在移動過程中必須保證小層在上邊

//藉助B塔可以將x層塔全部從A搬到C上,並且符合要求(在移動過程中大的那塊在下邊,小的那塊在上邊)

int main()

{

void tower(int x,char a,char b,char c); //聲明函數

int x=5,a=’A’,b=’B’,c=’C’; //x表示有5層塔,具體要多少層自己修改這個值。abc分別表示ABC塔。

tower(x,a,b,c); //x層塔從a移動到c的全過程,主程序只有這條有效語句

return 0;

}

//以下是tower函數的定義

//參數解析:x層塔放在a上,b是中間塔,c是目標塔。即x層塔要從a搬到c上。

//此函數實現x層塔從a整體轉移到c上。以及這個過程是怎麼搬的全部過程。

void tower(int x,char a,char b,char c)

{

if(x==1)printf(“將%d從%c放到%c\n”,x,a,c); //只有1層塔時,直接從a搬到c上。

else //不止1層塔,則先將x-1層塔從a按照規律搬到b上,再將最後一塊從a搬到c上,最後再將b上的x-1層塔按照規律搬到c上。

{

tower(x-1,a,c,b); //先將x-1層塔從a按照規律搬到b上,注意參數b放在最後,因為放在最後的參數是準備搬過去的目標塔。

printf(“將%d從%c放到%c\n”,x,a,c); //將最後一塊從a搬到c上

tower(x-1,b,a,c); //最後再將b上的x-1層塔按照規律搬到c上,注意參數b放在開頭,因為x-1層是要從b上搬過去的。

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/282895.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 08:06
下一篇 2024-12-22 08:06

相關推薦

  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python購物車程序

    Python購物車程序是一款基於Python編程語言開發的程序,可以實現購物車的相關功能,包括商品的添加、購買、刪除、統計等。 一、添加商品 添加商品是購物車程序的基礎功能之一,用…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟件。在VB中,有許多不同的方法可以運行程序,包括編譯器、發佈程序以及命令行。在本文中…

    編程 2025-04-29
  • Python一元二次方程求解程序

    本文將詳細闡述Python一元二次方程求解程序的相關知識,為讀者提供全面的程序設計思路和操作方法。 一、方程求解 首先,我們需要了解一元二次方程的求解方法。一元二次方程可以寫作: …

    編程 2025-04-29

發表回復

登錄後才能評論