**题目ID:****36915-**求路径总数
链接:https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b?tpId=37&&tqId=21314&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking
解题思路
| 1 | 2 | 3 |
-------------
| 4 | 5 | 6 |
-------------
| 7 | 8 | 9 |
-------------
对于上面的n×m(3*3)的格子,有两种情况
a. 如果n或者m为1,则只有一行或者一列,从左上角走到右下角的路径数为n + m
比如: 1 * 1格子,可以先向下走,再向右走,到达右下角;或者先向右走,
再向下走,到达右下角,共两条,即 1 + 1 = 2,对于1 * m和 n * m的
情况同学们自己画一下
b. 如果n,m都大于1,那么走到[n][m]格子的右下角只有两条路径,
<1>: 从[n - 1][m]格子的右下角向下走,到达
<2>: 从[n][m - 1]格子的右下角向右走,到达
所以走到[n][m]格子的右下角的数量为[n-1][m] + [n][m - 1],可以通过递归实现,情况a为递归的终止条
件。
#include <iostream>
using namespace std;
int PathNum(int m,int n)
{
if(n>1&&m>1)
return PathNum(n-1,m)+PathNum(n,m-1);
else if((m==1&&n>=1)||(m>=1&&n==1))
return m+n;
else
return 0;
}
int main()
{
int m,n;
while(cin>>n>>m)
{
cout<<PathNum(n,m)<<endl;
}
return 0;
}