4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法。
给定一个m*n的格子或棋盘,问从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)
解答:
把棋盘看做二维坐标,
设f(m,n)代表从坐标(0,0)到坐标(m,n)的移动方法,则
f(m,n)=f(m-1,n)+f(m,n-1)
初始为f(0,0)=0,f(0,1)=1,f(1,0)=1
由此进行递归运算,递归算法主要是要弄清楚退出条件和返回值,这个已经很清楚了,退出条件就是m,n至少有个为0,否则就要继续递归运算。
public class PayChess {
public static int process(int m,int n){
if(m == 0 && n == 0) return 0;
if(m == 1 && n == 0) return 1;
if(m == 0 && n == 1) return 1;
if(m == 0){
return process(m,n-1);
}
if(n == 0){
return process(m-1,n);
}
return process(m,n-1)+process(m-1,n);
}
public static void main(String[] args) {
int x = process(3,4);
System.out.println(x);
}