求斐波那契数列第n个数的效率比较

https://www.bilibili.com/video/BV1sX4y1G7oM?p=5&spm_id_from=pageDriver

1
求斐波那契数列第n个数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package testpack;
 
/**
 * 求斐波那契数列第n个数
 */
public class T1 {
    public static void main(String[] args) {
//        System.out.println(fun1(60));
//        System.out.println(fun2(60));
 
        int n = 76;
//        TimeTool.check("fun1", new TimeTool.Task() {
//            @Override
//            public void execute() {
//                System.out.println(fun1(n));//递归
//            }
//        });
 
        TimeTool.check("fun2", new TimeTool.Task() {
            @Override
            public void execute() {
                System.out.println(fun2(n));//循环
            }
        });
    }
 
    /**
     * 递归实现
     * @param n
     * @return
     */
    public static long fun1(long n) {
        if (n <= 1) return n;
        return fun1(n - 1) + fun1(n - 2);
    }
 
    /**
     * 循环实现
     * @param n
     * @return
     */
    public static int fun2(int n) {
        if (n <= 1) return n;
        int first = 0;
        int second = 1;
        for (int i = 0; i < n - 1; i++) {
            int sum = first + second;
            first = second;
            second = sum;
        }
        return second;
    }
}

  

1
计时器类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package testpack;
 
import java.text.SimpleDateFormat;
import java.util.Date;
 
/**
 * 计时器
 */
public class TimeTool {
    private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
 
    public interface Task {
        void execute();
    }
 
    public static void check(String title, Task task) {
        if (task == null) {
            return;
        }
        title = (title == null) ? "" : ("[" + title + "]");
        System.out.println(title);
        System.out.println("开始:" + sdf.format(new Date()));
        long begin = System.currentTimeMillis();
        task.execute();
        long end = System.currentTimeMillis();
        System.out.println("结束:" + sdf.format(new Date()));
        double time = (end - begin) / 1000.0;
        System.out.println("耗时:" + time + "秒");
        System.out.println("-------------------");
    }
}

  

posted @   尐鱼儿  阅读(57)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示