题目描述:
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
本题含有多组样例输入。
输入描述:
每组样例输入两个正整数n和m,用空格隔开。(1≤n,m≤8)
输出描述:
每组样例输出一行结果
示例:
输入:
2 2
1 2
输出:
6
3
解题思路:
这题可以用递归解决。即从终点倒推,到达终点的走法种类数,是其上方格子和左侧格子节点走法数的和,以此类推;其中,如果某个格子到达上方边缘或者左侧边缘,则返回1,因为只有一种走法能到达该位置;若递归过程中,m或者n小于0,则返回0。
测试代码:
#include <iostream> #include <string> using namespace std; int func(int m,int n) { if(m==0||n==0) return 1; else if(m<0||n<0) return 0; else return func(m-1,n)+func(m,n-1); } int main() { int m,n; while(cin>>m>>n) { cout<<func(m,n)<<endl; } return 0; }