日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

汉塔克问题(C语言递归)

發(fā)布時(shí)間:2025/3/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汉塔克问题(C语言递归) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

漢塔克問(wèn)題(C語(yǔ)言遞歸)

  • 操作步驟
  • 代碼

操作步驟

  • 當(dāng)n為1時(shí)直接將盤(pán)子從第一個(gè)柱子移動(dòng)到第三個(gè)柱子。
  • 當(dāng) n>1時(shí),先借助第三個(gè)柱子將n-1個(gè)盤(pán)子移動(dòng)到第二個(gè)柱子,然后將第n個(gè)盤(pán)子從第一個(gè)柱子移動(dòng)到第三個(gè)柱子,最后借助第一個(gè)柱子將在第二個(gè)柱子上的n-1個(gè)盤(pán)子移動(dòng)到第三個(gè)柱子上。
  • 在這里將將柱子依次記為x,y,z。

    代碼

    #include<stdio.h>void move(char x, int n, char z) {printf("%d,%c --> %c\n", n, x, z); }void hanoi(int n, char x, char y, char z) {if (n == 1) { //遞歸終止條件move(x, 1, z); //將編號(hào)為1的圓盤(pán)從 x移至zreturn;}else {hanoi(n - 1, x, z, y); //將第n個(gè)圓盤(pán)上邊的n-1個(gè)圓盤(pán),借助z移到y(tǒng)move(x, n, z); //這個(gè)時(shí)候還有1個(gè),為第n個(gè),將由x其移到zhanoi(n - 1, y, x, z); //這個(gè)時(shí)候?qū)-1個(gè)在y上邊的圓盤(pán)借助x移到z} }int main() {int n;scanf_s("%d", &n);hanoi(n, 'x', 'y', 'z');return 0; }

    以3個(gè)盤(pán)子來(lái)舉個(gè)例子。記住遞歸過(guò)程就像在棧上進(jìn)行操作一樣。產(chǎn)生一個(gè)記錄就壓入棧頂,沒(méi)退出一層遞歸就從棧頂彈出一個(gè)工作記錄。

    總結(jié)

    以上是生活随笔為你收集整理的汉塔克问题(C语言递归)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。