您的位置:首页 > 编程语言 > Java开发

java中关于爬楼梯算法的研究

2016-04-19 12:32 411 查看
首先题目是这样的:学校里有一个很长很长的楼梯,大家都称其为百步梯,但是具体层数大家都不清楚(台阶数N<=1000000)。Robin每天去上课都要经过这个楼梯,但是由于Robin很不喜欢数字M,所以每次经过都会刻意避开第M级台阶。(奇怪的Robin)Robin每次可以跨一级或两级台阶,试求Robin走楼梯的路径总数(注意Robin是无论如何都不会踏上第M级台阶的)。

爬楼梯可以用到斐波那契数列F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)所以我们程序中需要用到递归函数。记住如果楼梯的阶数是N,这上楼梯的方法总数为f(N+1)。而这题中因为存在一阶我们不能登,所以可以将问题划分为两个子问题,第一个是从0阶到M-1阶,第二个是从M阶到N阶,然后二者相乘就可以了。 

代码如下:

import java.util.Scanner;

/**
* Created by Administrator on 2016/4/19.
*/
public class Recursive {
public static int fn(int n) {
if (n == 0) {
return 0;
} else if (n == 1 | n == 2) {
return 1;
} else return fn(n - 1) + fn(n - 2);
}

public static void main(String[] args) {
int N, M, sum;
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
N = Integer.parseInt(sc.next());
M = Integer.parseInt(sc.next());
sum = fn(N - M) * fn(M);
System.out.println(sum);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android java 算法