求斐波那契数列的第n个数(递归方法)

本文介绍了如何使用递归方法在Java中计算斐波那契数列的第n个数。通过逐步解析递归过程,帮助读者理解斐波那契数列的计算逻辑。

 斐波那契数列:

1    ------->第一项

1    ------->第二项   ------->前两项

 

2    ------->第三项   ------->前一项

3                            ------->当前项

5                                   ·

8                                   ·                     

13                                 ·

21

······

 

import java.util.Scanner;

public class Fibonacci {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请问要查找第几个斐波那契数");
        int k = scanner.nextInt();
        int ret = fib(k);
        System.out.println("第k个斐波那契数为:" + ret);
        scanner.close();
    }
    public static int fib(int n){
        if(n == 1||n == 2)//递归结束条件:数列的第一项和第二项均为1
            return 1;
        else
            return fib(n - 1) + fib(n -2);//递归规则:从第三项开始,当前项等于前两项之和
    }
}

 

 

### 实现思路 斐波那契数列是一个经典的递归问题。其定义如下: - 当 $ n = 1 $ 或 $ n = 2 $ 时,斐波那契数列为 1。 - 当 $ n > 2 $ 时,斐波那契数列的第 $ n $ 项等于前两项之和,即 $ F(n) = F(n-1) + F(n-2) $。 通过递归方式实现该逻辑时,函数会不断调用自身来计算更小的子问题,直到达到基本情况($ n = 1 $ 或 $ n = 2 $)为止。 ### 示例代码 以下是使用 C/C++ 和 Python 编写的递归实现示例: #### C语言实现 ```c #include <stdio.h> int fibonacci(int n) { if (n == 1 || n == 2) { return 1; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } int main() { int n; printf("请输入一个整数 N (N <= 40): "); scanf("%d", &n); printf("斐波那契数列的第 %d 项是: %d\n", n, fibonacci(n)); return 0; } ``` #### C++语言实现 ```cpp #include <iostream> using namespace std; int fibonacci(int n) { if (n == 1 || n == 2) { return 1; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } int main() { int n; cout << "请输入一个整数 N (N <= 40): "; cin >> n; cout << "斐波那契数列的第 " << n << " 项是: " << fibonacci(n) << endl; return 0; } ``` #### Python语言实现 ```python def fibonacci(n): if n <= 2: return 1 else: return fibonacci(n - 1) + fibonacci(n - 2) n = int(input("请输入一个整数 N (N <= 40): ")) print(f"斐波那契数列的第 {n} 项是:", fibonacci(n)) ``` ### 性能说明 虽然递归方法直观且易于理解,但它的性能较差,因为存在大量的重复计算。例如,在计算 $ F(n) $ 时,会多次重复计算 $ F(n-3) $、$ F(n-4) $ 等值。对于较大的 $ n $ 值(如 $ n > 30 $),递归方法效率较低[^5]。 ### 输入输出示例 输入样例: ``` 11 ``` 输出样例: ``` 89 ``` 输入样例: ``` 20 ``` 输出样例: ``` 6765 ``` ### 优化建议 如果需要提高性能,可以采用以下方法之一: - 使用 **记忆化递归**(Memoization)来缓存中间结果,避免重复计算。 - 使用 **迭代方法** 替代递归,以减少函数调用开销。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值