Java斐波那契数列及汉诺塔问题

斐波那契数列

背景介绍:

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)

题目要求:斐波那契数列 求前20项。

方法一:递归

分析:

在数学上,斐波纳契数列以如下被以递推的方法定义:

F(1)=1,F(2)=1

F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

这个数列从第3项开始,每一项都等于前两项之和。

程序如下:

class Test1{

    public static void main(String[]args){

        for(int n=1;n<=20;n++){

            System.out.println(fibo(n));

        }

    }


     public static int fibo (int n){

        if(n==1||n==2){                 

            return 1;

        }

        return fibo(n-1)+fibo(n-2);    
    }

}

方法二;迭代

程序如下:

class Test2{

    public static void main(String[]args){

        fibolterator(n);

    }

     public static void fibolterator(int n){

        int a=1;

        int b=1;

        System.out.println(a);

        System.out.println(b);

        int count=2;             

        int c;

        while(true){

            c=a+b;

            System.out.println(c);

            count++;

            if(count==n){

                return;

            }

            a=b;

            b=c;

        }

    }

}

 

汉诺塔

背景介绍:

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

分析:

将X上的金片如何移到Z上过程如下:

X -> Z
X -> Y
Z -> Y
X -> Z
Y -> X
Y -> Z
X -> Z

那么64个黄金片可以看为

64个 X->Z

    前63个 X->Y

        前62个 X->Z

 

        第63个 X->Y

        前62个 Z->Y

    第64个 X->Z

    前63个 Y->Z

        前62个 Y->X

        第63个 Y->Z

        前62个 X->Z

以此递推

实现代码如下:

class Hanno{
    public static void main(String[] args){
        //盘子的个数 出发 中间 目的
        hanno(64,"X","Y","Z");
    }                                     
    public static void hanno(int n,String begin,String mid,String end){
        if(n==1){
            System.out.println(begin+" -> "+end);
        }else{
            hanno(n-1,begin,end,mid);
            System.out.println(begin+" -> "+end);
            hanno(n-1,mid,begin,end);
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 斐波那契数列的实现可以使用循环或递归的方式。下面分别介绍这两种方法: 1. 使用循环实现斐波那契数列: ```java public static int fibonacci(int n) { if (n <= 1) { return n; } int prev = 0; int current = 1; int result = 0; for (int i = 2; i <= n; i++) { result = prev + current; prev = current; current = result; } return result; } ``` 在上面的代码中,我们使用循环从头开始计算斐波那契数列,直到达到指定的位置 n。 2. 使用递归实现斐波那契数列: ```java public static int fibonacci(int n) { if (n <= 1) { return n; } return fibonacci(n - 1) + fibonacci(n - 2); } ``` 在上面的代码中,我们使用递归的方式定义了斐波那契数列的计算规则。当 n 小于等于 1 时,直接返回 n;否则,递归地计算前两个数的和。 接下来,我们来看一下 Java 中汉诺塔的实现: ```java public static void hanoi(int n, char source, char auxiliary, char target) { if (n == 1) { System.out.println("Move disk 1 from " + source + " to " + target); return; } hanoi(n - 1, source, target, auxiliary); System.out.println("Move disk " + n + " from " + source + " to " + target); hanoi(n - 1, auxiliary, source, target); } ``` 在上面的代码中,我们使用递归的方式实现了汉诺塔问题。hanoi 方法接受四个参数:n 表示要移动的盘子数量,source 表示起始柱子,auxiliary 表示辅助柱子,target 表示目标柱子。当只有一个盘子时,直接将盘子从起始柱子移动到目标柱子;否则,将 n-1 个盘子从起始柱子通过辅助柱子移动到目标柱子上,再将最后一个盘子从起始柱子直接移动到目标柱子上。 以上就是 Java斐波那契数列和汉诺塔的实现方法。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值