1 使用递归方法
1.1递归方程和基础情况
基础情况:
if (n == m || m == 0) {
return 1;
}
递归方程:Recursion(m, n - 1) + Recursion(m - 1, n - 1)
1.2 代码
#include<stdio.h>
#include<stdlib.h>
int Recursion(int m,int n) {
if (n == m || m == 0) {
return 1;
}
else
return Recursion(m, n - 1) + Recursion(m - 1, n - 1);
}
int main() {
int m, n,ans;
scanf("%d %d",&m,&n);
ans = Recursion(m, n);
printf("%d", ans);
return 0;
}
2 使用迭代方法
2.1 原理
迭代核心过程,利用杨辉三角,进行动态规划转移,
2.2 代码
#include<stdio.h>
#include<stdlib.h>
int Iteration(int m,int n) {
int ans = 0;
int** iteration = (int**)malloc(n * sizeof(int*));
for (int i = 0; i < n; i++)
{
iteration[i] = (int*)malloc(n* sizeof(int));
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == 0||i==j) {
iteration[i][j] = 1;
}
else
iteration[i][j] = 0;
}
}
for (int i = 1; i<=m; i++) {
for (int j = 1; j<=n; j++) {
iteration[i][j]= iteration[i][j-1] + iteration[i - 1][j - 1];
}
}
return iteration[m][n];
}
int main() {
int m, n, ans;
scanf("%d %d", &m, &n);
ans = Iteration(m, n);
printf("%d", ans);
return 0;
}
3 总结
再利用递归和迭代求解问题是要弄清楚他们的递推公式和结束条件,递归的代码简短但是不易于理解。