java实现斐波那契数列
算法主要利用递归算法实现,实现很简单:
代码如下
package 线性结构;
public class TestFebonacci {
public static void main(String[] args) {
// TODO Auto-generated method stub
//斐波拉契数列:1 1 2 3 5 8 13
int j =febnoacci(6);
System.out.println(j);
}
//打印n斐波拉契数列
public static int febnoacci(int i ) {
if (i == 1 || i == 2) {
return 1;
}
else {
return febnoacci(i-1)+febnoacci(i-2);
}
}
}
运行结果
例如计算第六个数,结果是8.
汉诺塔问题
其实现也是利用了递归算法,即如果是一个盘子,就直接移动过去,如果是两个或者两个一个的盘子,则将将前面n-1个盘子看成一个,将最下面的一个盘子看成一个,分为两个盘子的形式,这样处理最上面的n-1个盘子时又看成最下面一个和上面n-2个盘子两组,以此类推,递归实现,从而实现了汉诺塔问题。
代码如下
package 线性结构;
public class TestHanoi {
public static void main(String[] args) {
// TODO Auto-generated method stub
hanoi(3,'A','B','C');
}
//汉诺塔问题
/* n 共有N个盘子
* from 开始的柱子
* in 中间的柱子
* to 目标柱子
* */
public static void hanoi(int n,char from,char in,char to) {
//只有一个盘子
if(n ==1) {
System.out.println("第1个盘子从"+from+"移到"+to);
}
else {
//移动上面所有盘子到中间位置
hanoi(n-1,from,to,in);
//移动下面一个盘子
System.out.println("第"+n+"个盘子从"+from+"移到"+to);
//上面的所有盘子从中间位置移到目标位置
hanoi(n-1,in,from,to);
}
}
}
运行结果
可以看到有三个盘子的汉诺塔实现,也可以实现更多个。