题目描述
有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。
输入描述:
输入包括一行,逗号隔开的两个正整数x和y,取值范围[1,10]。
输出描述:
输出包括一行,为走法的数目。
示例1
输入
3 2
输出
10
思路:
把网格看做二维座标,向下为正,向右为正:
设f(m,n)代表从座标(m,n)到座标(0,0)的移动方法,则
f(m,n)=f(m-1,n)+f(m,n-1)
开始为f(0,0)=0,f(0,1)=1,f(1,0)=1
进行递归运算,退出条件就是m,n至少有个为0,否则就要继续递归运算。
#include<iostream>
using namespace std;
int step(int n, int m){
if(m == 0 || n == 0) //如果走到边界了,则只有一种方式了
return 1;
else
return step(n - 1, m) + step(n, m - 1); //递归
}
int main(){
int x, y;
cin >> x >> y;
cout << step(x, y) << endl;
return 0;
}