题目描述
给定一个 n×m的方格阵,沿着方格的边线走,从左上角(0,0)开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m)一共有多少种不同的走法。
算法
递归思想(这毕竟是函数章节,函数有个重要特性就是递归)
假如我们建立了一个函数A(m,n)来计算走完mn方格的走法,每步都有两种可能,一步之后,我们要重新计算A(m-1,n)和A(m,n-1)的走法,即A(m,n)=A(m-1,n)+A(m,n-1).如此递归,容易发现当走到最右边或最下面时,就只有一种走法,因此我们把n==1或m==1设为递归终点。
(有个小坑,题目要求按线走,节点数是(n+1)(m+1),所以要加一下。)
#include <iostream>
using namespace std;
int go(int n, int m){
if(n==1||m==1) return 1;
return go(n-1, m)+go(n, m-1);
}
int main(){
int a, b;
cin >> a >> b;
a++;
b++;
printf("%d", go(a, b));
return 0;
}