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);
}
}
}
爬楼梯可以用到斐波那契数列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);
}
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法