设计递归算法,求解问题:有一楼梯有 M 级,刚开始时在第1级,每次只能跨上1级或2级,要走到第 M 级,共有多少种走法?用伪代码或 C 均可。2. n 个矩阵连乘,给出分治法/穷举法求解最优连乘次序的乘法次数的代码。
时间: 2024-05-30 15:16:53 浏览: 81
1. 递归算法求解楼梯问题:
伪代码:
function climbStairs(n)
if n <= 2 then
return n
else
return climbStairs(n-1) + climbStairs(n-2)
C语言代码:
int climbStairs(int n) {
if (n <= 2) {
return n;
} else {
return climbStairs(n-1) + climbStairs(n-2);
}
}
2. 分治法求解矩阵连乘问题:
伪代码:
function matrixChainOrder(p, i, j)
if i = j then
return 0
min = ∞
for k = i to j-1 do
count = matrixChainOrder(p, i, k) + matrixChainOrder(p, k+1, j) + p[i-1]*p[k]*p[j]
if count < min then
min = count
return min
C语言代码:
int matrixChainOrder(int p[], int i, int j) {
if (i == j) {
return 0;
}
int k;
int min = INT_MAX;
for (k = i; k < j; k++) {
int count = matrixChainOrder(p, i, k) + matrixChainOrder(p, k+1, j) + p[i-1]*p[k]*p[j];
if (count < min) {
min = count;
}
}
return min;
}
其中,p数组存储矩阵的行列数,i,j分别表示要计算的矩阵范围的起始和结束下标。
阅读全文