假设有排成一行的N个位置,记为1-N,N一定大于或等于2
开始时机器人在其中的M位置上(M一定是1-N中的一个)
如果机器人来到1位置,那么下一步只能往右来到2位置
如果机器人来到N位置,那么下一步只能往左来到N-1位置
如果机器人来到中间位置,那么下一步可以往左走或者往右走
规定机器人必须走k步,最终能来到P位置(P也是1-N中的一个)的方法有多少种?
给定四个参数N,M,K,P,返回方法数。 代码:
/**
* 直线机器人位置
* @param N N个位置
* @param M 机器人开始在M位置
* @param K 机器人必须走K步
* @param P 最终来到P位置
* @return
*/
private static int process1(int N,int M,int K,int P){
if(K == 0){
if(M == P){
return 1;
}else{
return 0;
}
}
if(M == 0){
return process1(N,M+1,K-1,P);
}
if(M == N-1){
return process1(N,M-1,K-1,P);
}
return process1(N,M+1,K-1,P)+process1(N,M-1,K-1,P);
}