請編寫一個函數(允許增加子函數),計算n x m的棋盤格子(n為橫向的格子數,m為豎向的格子數)沿着各自邊緣線從左上角走到右下角,總共有多少種走法,要求不能走回頭路,即:只能往右和往下走,不能往左和往上走。———牛客
對於n*m的棋盤,可分為以下兩種情況:
1.當n == 1或 m == 1時,共有n+m種走法(不為1的加1種);
2.當n、m都大於1時,那么最終走到右下角只有兩條路徑:
(1)從[n-1, m]到右下角;
(2)從[n, m-1]到右下角。
假設從左上角走到[n, m]位置有f(n, m)種走法,則:n*m的棋盤從左上角到右下角共有f(n-1, m) + f(n, m-1)種走法。
因此,我們可以使用遞歸解決上述問題,退出條件為1.
實現:
1 int func(int n, int m) 2 { 3 if(n == 1 || m == 1) 4 return n+m; 5 else 6 return func(n-1, m) + func(n, m-1); 7 }