1.漢諾塔、八皇后、斐波那契數列
a: 遞迴計算累加和
前三題均為簡單遞迴,找到遞迴終止條件即可
#include
using namespace std;
intf
(int n)
return n +
f(n -1)
;}intmain()
b: 計算遞推式
#include
using namespace std;
int a, b, n;
intf
(int n)
return a *
f(n -1)
+ b;
}int
main()
return0;
}
c: 計算n階乘
#include
using namespace std;
long
longf(
int n)
intmain()
return0;
}
d: 紅紅的漢諾塔
這題既可以用公式直接輸出結果,也可以使用遞迴的方法求解
公式的方法求解
#include
#include
#include
using namespace std;
intmain()
return0;
}
// 遞迴的方法求解
#include
using namespace std;
int ans1 =
0, ans2 =0;
// ans1為總移動數,ans2為編號為x的盤子的移動次數
void
hanio
(int n,
int x)
hanio
(n -
1, x)
; ans1++;if
(x == n) ans2++
;hanio
(n -
1, x);}
intmain()
return0;
}
//如果弄懂了八皇后的**,重點其實在於如何只輸出一次
#include
#include
#include
using namespace std;
int row[9]
;int flag =1;
void
queen
(int now)
printf
("\n");
flag =0;
return;}
int i, j;
for(i =
0; i <
9; i++)if
(j == now)}}
intmain()
f: 愛吃車厘子的丹丹
找到遞迴終止條件:當天數等於 n 時,返回 m。
遞迴式為 f(n) = 2 * (f(n-1) + 1)。
#include
#include
using namespace std;
typedef
long
long ll;
int n, m, t;
intf
(int a)
return2*
f(a +1)
+2;}
intmain()
return0;
}
g: 紅紅爬樓
首先明確要求的 f(n) 表示的是走到 n 級台階的總方案數。而從前一狀態到達當前狀態有兩種走法,一種為上一級,一種為上兩級,遞迴求和即可。
#include
#include
using namespace std;
intf
(int x)
else
if(x ==2)
return2;
else
return
f(x-1)
+f(x-2);
}int
main()
分治法之歸併排序(遞迴 分治)
歸併排序 思想 1.分而治之,將乙個無序的數列一直一分為二,直到分到序列中只有乙個數的時候,這個序列肯定是有序的,因為只有乙個數,然後將兩個只含有乙個數字的序列合併為含有兩個數字的有序序列,這樣一直進行下去,最後就變成了乙個大的有序數列 2.遞迴的結束條件是分到最小的序列只有乙個數字的時候 時間複雜...
遞迴與分治 歸併排序
描述 給定乙個數列,用歸併排序演算法把它排成公升序。輸入 第一行是乙個整數n n不大於10000 表示要排序的數的個數 下面一行是用空格隔開的n個整數。輸出 輸出排序後的數列,每個數字佔一行。輸入樣例 5 3 2 1 4 5 輸出樣例 1 2345 基本思路 歸併排序是將一組無序的數列,先一分為二,...
歸併排序演算法 分治 雙遞迴
歸併排序運用分治演算法與遞迴思想,那麼其雙遞迴究竟是怎樣的呢?今天被困擾了一會一直覺得並沒有完全理解,後通過思考以及查閱資料,弄懂了其遞迴的真正實現過程!寫給已了解歸併排序的coder code void merge int r,int r1,int s,int m,int t 歸併子串行 whil...