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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++递归算法经典实例详解

發布時間:2023/12/10 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++递归算法经典实例详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*--------------------------- 該段為引用----------- 遞歸算法解決問題的特點: (1) 遞歸就是在過程或函數里調用自身。 (2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。 (3) 遞歸算法解題通常顯得很簡潔,但遞歸算法解題的運行效率較低。所以一般不提倡用遞歸算法設計程序。 (4) 在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。所以一般不提倡用遞歸算法設計程序。

?------------------------------------------------- */


說一下我對遞歸算法的理解。

遞歸算法的代碼,可以分成兩個部分:遞歸出口(滿足輸出條件之類的)和遞歸部分(遞歸代碼的主體)。

遞歸算法特點之一就是把整體換成部分。比如階乘和全排列問題,都是把問題“降階”(待會看代碼就知道什么意思了。)

還有一個最重要的特點————————效率低,但是遞歸算法作為入門級算法還是很值得我這樣的小白研究的。


來看看幾個經典的問題。1.全排列 ,2.漢諾塔,3.階乘



1.全排列:給你一個數組,你把這個數組里的數的所有排列方式寫列出來。

input {1,2,3}

output{1,2,3},{1,3,2},{2,3,1}......(懶得敲了)


代碼:

#include <iostream> using namespace std; int n = 0; void swap(char *q ,char *p) { //交換函數 int temp; temp= *q; *q = *p; *p = temp; } void perm(char arr[],int k, int m ) { int i; if(k >m) { for(i = 0 ; i <= m ; i++) { //遞歸結束出口,當數列只剩下一個數的時候輸出 cout<<arr[i]<<" "; } cout<<endl; } else { for(i = k ; i <=m;i++) { //遞歸部分 swap(arr[k],arr[i]); perm(arr,k+1,m); /*把數組看成1{234}+2{134}+3{124}+4{123}再把{234}看成2{34}+3{24}+4{23}一直把整體化為部分,一直把大問題分解成小問題。*/ swap(arr[k],arr[i]); } } } int main() { char arr[] ="1234"; perm(arr,0,3); return 0; }
2.漢諾塔問題

就是移環子的游戲


這個也可以用遞歸算法實現。

ABC分別是123柱子,代碼思路大概是這樣的

把N-1層的環子先通過C移到B,最后再把第N層的最大的環子移到C,這個時候就剩下一個N-1層的新“塔”,那么我們把他看成一個新的“塔”把B柱看成之前的A柱,通過C柱把(N-1)-1層移到A柱,再把第N-1層的最大(原本第二大)的環子放到C,如此循環最后N=1 就了解了。

#include<iostream> using namespace std; void hanoi(int n,char a,char b,char c) { if(n==1) cout<<n<<" "<<a<<" "<<c<<endl; else { hanoi(n-1,a,c,b); cout<<n<<" "<<a<<" "<<c<<endl; hanoi(n-1,b,a,c); } } int main() { int n; cout<<"輸入正整數:"<<endl; cin>>n; cout<<"結果為"<<endl; hanoi(n,'A','B','C'); /* 假設有4層,跟全排列差不多的想法,先把他看成3層,再看成2層,而且移動的方法是相同的。*/ return 0; } 3.階乘……不講了。。

總結

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

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