遞歸——漢諾塔問題(python實現)

来源:https://www.cnblogs.com/TuerLueur/archive/2018/08/21/9514983.html
-Advertisement-
Play Games

規則 1. 每次移動一個盤子 2. 任何時候大盤子在下麵,小盤子在上面 方法 假設共n個盤子 當n=1時: 1. 直接把A上的一個盤子移動到C上(A C) 當n=2時: 1. 把小盤子從A放到B上(A B) 這裡開始採用參數,rsc源地址=A,dst目的地址=B 2. 把大盤子從A放到C上( A C ...


規則

  1. 每次移動一個盤子
  2. 任何時候大盤子在下麵,小盤子在上面

方法

假設共n個盤子

  • 當n=1時:
    1. 直接把A上的一個盤子移動到C上(A->C)
  • 當n=2時:
    1. 把小盤子從A放到B上(A->B)這裡開始採用參數,rsc源地址=A,dst目的地址=B
    2. 把大盤子從A放到C上( A->C)rsc=A, dst=C
    3. 把小盤子從B放到C上(B->C)rsc=B, dst=C
  • 當n=3時:
    1. 把A上的兩個盤子,通過C移動到B上去, 調用遞歸實現(A-C->B)rsc=A, trans中轉=C, dst=B
    2. 把A上剩下的一個最大盤子移動到C上(A->C)rsc=A, dst=C
    3. 把B上兩個盤子,藉助於A,挪到C上去, 調用遞歸(B-A->C)rsc=B, trans=A, dst=C
  • 當n=n時:

    1. 把A上的n-1個盤子,藉助於C,移動到B上去,調用遞歸(A-C->B)rsc=A, trans=C, dst=B

    2. 把A上的最大一個盤子,移動到C上(A->C)rsc=A, dst=C

    3. 把B上n-1個盤子,藉助於A,移動到C上, 調用遞歸(B-A->C)rsc=B, trans=A, dst=C

每次都是先將其他圓盤移到輔助柱子上,再將最底下的移到C,然後再把原先柱子作為輔助柱子,重覆

代碼實現

def move(n, a, b, c):
'''
漢諾塔的遞歸實現
n:代表幾個盤子
a:代表第一個塔,rsc
b:代表第二個塔,trans
c:代表第三個塔, dst
'''
    if n == 1:
        print(a, '=>', c)
    else:
        move(n-1, a, c, b)
        print(a, '=>', c)
        move(n-1, b, a, c)

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近發現一些網站,可以解析各大視頻網站的vip。仔細想了想,這也算是爬蟲呀,爬的是視頻數據。 首先選取一個視頻網站,我選的是 影視大全 ,然後選擇上映不久的電影 “一齣好戲” 。 分析頁面 我用的是chrome瀏覽器,F12進入查看。選擇NetWork的Doc,發現主體部分的數據是從這個網站獲取的。 ...
  • 重載new,delete運算符 new,delete在c++中也被歸為運算符,所以可以重載它們。 new的行為: 先開闢記憶體空間 再調用類的構造函數 開闢記憶體空間的部分,可以被重載。 delete的行為: 先調用類的析構函數 再釋放記憶體空間 釋放記憶體空間的部分,可以被重載。 為什麼要要重載它們? 有 ...
  • Java 自學之路 前言 從運行第一個程式開始算起,我接觸編程也有三年的時間了。最初是從51單片機入門學習的C語言,班裡面的大佬帶著我一起做小項目,但是因為沒人教,基本靠自學,學得慢,寫的代碼也爛,很沒有章法。後來大三下半學期開始準備考研(從電子跨考電腦),從零開始學習數據結構,這才算是真正地入了 ...
  • 1、IOC&DI概述 IOC(Inversion of Control):其思想是反轉資源獲取的方向。傳統的資源查找方向要求組件向容器發起請求查找資源,作為回應,容器適時的返回資源。 而應用了IOC之後,則是容器主動地將資源推送給它所管理的組件,組件要做的僅是選擇一種合適方式來接受資源。也稱查找的被 ...
  • 《Spring Boot基礎教程》 第1節 工具的安裝和使用 Spring Boot文檔 https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/I.%20Spring%20Boot%20Documentation/ 一、 ...
  • 一.字元格式化輸出 占位符 %s s = string 字元串 %d d = digit 整數 %f f = float 浮點數 ''' ......'''不僅可以表示註釋多行,也可以表示列印多行。 二.str.isdigit()方法 檢查字元串是否只由數字組成 三.for迴圈 簡單的for迴圈,輸 ...
  • 一、前言 最近在做Matalb/Simulink與C/C++的混合編程,主要是完成TCP、UDP、SerialPort等常見通信方式的中間件設計,為Simulink模型提供數據採集及解析模塊。 問題在於沒有搞清楚Simulink中調用C/C++的內在機制,將測試OK的C++程式移植到mex上時,總會 ...
  • 楊輝三角有以下幾個特點 : 每個數等於它上方兩數之和。 每行數字左右對稱,由1開始逐漸變大。 第n行的數字有n項。 第n行數字和為2n-1。 第n行的m個數可表示為 C(n-1,m-1),即為從n-1個不同元素中取m-1個元素的組合數。 第n行的第m個數和第n-m+1個數相等 ,為組合數性質之一。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...