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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

hanoi塔栈递归算法c语言,c++递归函数,c语言递归算法经典实例

發布時間:2023/12/10 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hanoi塔栈递归算法c语言,c++递归函数,c语言递归算法经典实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c++遞歸函數,c語言遞歸算法經典實例

一、什么是遞歸算法

遞歸即遞推+回歸。遞歸算法是把問題轉化為規模縮小了的同類子問題,然后遞歸調用函數(或過程)來表示問題的解。

二、遞歸算法的特點

1.必須有 遞歸函數 +遞歸出口

2.遞歸算法解題通常顯得簡潔,但效率較低且系統通過棧來儲存每一層的返回點、局部變量,遞歸次數過多容易造成棧溢出。

三、如何編寫遞歸函數

例:Hanoi 塔(問題內容不再贅述)

我們以三個圓盤(從小到大依次成為1,2,3號)三根柱子(A,B,C)為例:

想要將 3號 移至C柱

step1.  借助C把1、2號盤移到B;

step2.  將3號盤移至C;

想要將 2號? 移至 C 柱 則用上述同樣的思想? ? ?(遞歸函數的內涵所在,將大問題逐個分解為相同小問題)

step1. 借助C 將 1號盤 移至 A柱/*這里可以直接將 1號盤移至A,但如果 B盤上不止一個盤則需要借助C ,我這里是 按整體規律來寫*/

step2.? 將 2號盤 移至 C;

最后將 1號盤 移至 C柱

Hanoi塔 解題步驟:

1.將 A 上 n-1 個盤子移到B (借助C)

2.把 A 上 剩下的盤子移到C

3.將 n-1 個盤子從B 移到 C (借助A)

!!!

不用死記A B C在各個盤移動時的站位,將他們想成

初始柱? 過渡柱? 目標柱這樣在敲代碼時思路會清晰一些

代碼實踐:

#include

using namespacestd;void move(char x1, charx2) {

cout<< x1 << "-->" << x2 <

}//A、B、C三個位置依次對應 初始柱/ 過渡柱/ 目標柱【是對應的位置對應各種柱子(初始、過渡、目標柱) 不是ABC字母對應】void hanoi(int n, char A, char B, charC) {if (n == 1)

move(A, C);else{

hanoi(n- 1, A, C, B); //A為初始柱 C為過渡柱 B為目標柱

move(A, C);

hanoi(n- 1, B, A, C); //B為初始柱 A為過渡柱 C為目標柱

}

}intmain() {

cout<< "輸入盤子數:";intp;

cin>>p;char A = 'A', B = 'B', C = 'C';

hanoi(p, A, B, C);return 0;

}

----------------------------------------------------小分割線----------------------------------------------

注意遞歸算法的兩個必要條件遞歸出口和遞歸函數

認真分析如何將大問題分解為子問題

這些需要多加練習~

==============================大分割線=========================

如有錯誤還是希望評論指正 :)

http://www.dengb.com/cjjc/1368429.htmlwww.dengb.comtruehttp://www.dengb.com/cjjc/1368429.htmlTechArticlec++遞歸函數,c語言遞歸算法經典實例 一、什么是遞歸算法 遞歸即 遞推+回歸 。遞歸算法是把問題轉化為規模縮小了的同類子問題,然后遞...

總結

以上是生活随笔為你收集整理的hanoi塔栈递归算法c语言,c++递归函数,c语言递归算法经典实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。