JAVA-递归-斐波那契数列

本文介绍递归的基本概念及其在程序设计中的应用,并通过斐波那契数列实例展示递归方法与传统循环方法的区别及优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。——这是百度百科说的。

其实说白了,就是递归方法本身调用自己而进行的运算,下面举个例子说明一下这个例子就是很著名的——斐波那契数列。
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……
可以看出来第三个数就是前面两个数相加从而得到的。

如果使用正常的循环进行解决的话就是这样:

public class FeiBo{
    public static void main(String[] args) {
        int num1=0;
        int num2=1;
        int numn=1;
        int n=10;
        for (int i = 3; i <=n; i++) {
            numn=num1+num2;
            num1=num2;
            num2=numn;
        }
        System.err.println(n+"个数的结果为:"+numn);
    }
}

运行结果为:

10个数的结果为:34

这是使用正常的循环方法进行运算,如果使用递归的话就是一下这样:

    public static int Recursion(int n){

        if(n==1){
            return 0;
        }

        if(n==2){
            return 1;
        }
        return Recursion(n-1)+Recursion(n-2);
    }

递归需要结束条件,到情况下递归就不需要继续调用,结束递归。上面案例结束条件就是当n=1或者2的时候,就返回0或者1,而不是继续调用递归方法本身了。

递归最主要的两个条件就是,自己调用自己,结束递归的条件。

因为递归是自己调用自己所以浪费资源大,运行时间比循环长很多,运行慢,效率底。

### 斐波那契数列递归实现 在编程中,斐波那契数列可以通过递归实现。下面是一个简单的Java程序来展示如何通过递归计算斐波那契数列的第n项[^3]。 ```java public class Solution { public int Fibonacci(int n) { if (n == 0) { return 0; } else if (n == 1) { return 1; } return Fibonacci(n - 1) + Fibonacci(n - 2); } } ``` 这段代码定义了一个名为`Solution`的类,在其中有一个公共的方法`Fibonacci`接受一个整型参数`n`并返回该位置上的斐波那契数值。当`n`等于0时返回0;当`n`等于1时返回1;对于其他情况,则是前两项之和的结果。 另外,为了满足特定平台的要求,比如PTA6-2可能需要不同的输入输出处理以及更详细的调试信息。这里提供一段Python版本的例子,它不仅实现了基本功能还增加了计数器用于统计每次调用的情况[^5]: ```python def fibonacci_with_count(n, memo={}): global call_count call_count += 1 if n in memo: return memo[n], call_count elif n <= 1: result = n else: result, _ = fibonacci_with_count(n-1) temp, __ = fibonacci_with_count(n-2) result += temp memo[n] = result return result, call_count if __name__ == "__main__": call_count = 0 n = int(input("Input n: ")) for i in range(1, n+1): fib_i, count = fibonacci_with_count(i) print(f"Fib({i})={fib_i}, count={count}") ``` 此段Python代码同样遵循了斐波那契序列的基本逻辑,并引入了一个字典`memo`来进行记忆化存储以减少重复计算提高效率。同时利用全局变量`call_count`跟踪每一次函数被调用的过程,最后按照指定格式输出结果。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值