請編寫一個函數(允許增加子函數),計算n x m的棋盤格子(n為橫向的格子數,m為豎向的格子數)沿著各自邊緣線從左上角走到右下角,總共有多少種走法,要求不能走回頭路,即:只能往右和往下走,不能往左和往上走。
解答
用遞歸來做,將右下角看做原點(0, 0),左上角看做坐標(m, n),下圖所示:
從(m, n)—>(0, 0)就分兩步走:
往右走一步:f(m, n - 1)—>(0, 0) 加上下走一步:f(m - 1, n)—>(0, 0)
注意:但凡是觸碰到邊界,也就是說f(x, 0)或者f(0,x)都只有一條直路可走了,這里的x是變量哈。
f(m, n) = f(m, n - 1) + f(m - 1, n)
#include<iostream>
using namespace std;int fun(int n,int m)
{if( n == 0 || m == 0)return 1;elsereturn fun(n,m-1)+fun(n-1,m);
}int main()
{int n;int m;while(cin>>n>>m){cout<<fun(n,m)<<endl;}return 0;
}