递归8

169 阅读1分钟

假设有排成一行的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);
}