Java機試題:請計算n*m的棋盤格子,從棋盤左上角出發沿著邊緣線從左上角走到右下角,總共有多少種走法。【動態規劃(遞推、遞迴、迭代)】
阿新 • • 發佈:2022-01-02
描述
請計算n*m的棋盤格子(n為橫向的格子數,m為豎向的格子數)從棋盤左上角出發沿著邊緣線從左上角走到右下角,總共有多少種走法,要求不能走回頭路,即:只能往右和往下走,不能往左和往上走。 注:沿棋盤格之間的邊緣線行走思路
參考連結:https://www.nowcoder.com/questionTerminal/e2a22f0305eb4f2f9846e7d644dba09b 用遞迴來做,將右下角看做原點(0, 0),左上角看做座標(m, n): 從(m, n)—>(0, 0)就分兩步走: 往右走一步:f(m, n - 1)—>(0, 0) 加上下走一步:f(m - 1, n)—>(0, 0)則有遞迴式: f(m, n) = f(m, n - 1) + f(m - 1, n)import java.util.*; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNextLine()){ String[] nums = sc.nextLine().split(" ");int n = Integer.valueOf(nums[0]); int m = Integer.valueOf(nums[1]); int sum = getNums(n,m); System.out.println(sum) ; } }
// 動態規劃,遞迴函式 public static int getNums(int n,int m) {
// 遞迴函式結束條件 if( n ==0 || m == 0){ return1; } else {
// n,m的走法,等於 n-1,m與n,m -1相加 return getNums(n - 1, m) + getNums(n, m -1); } } }