【例4】用递归的方法求Fibonacci数列中的第N个数

这篇博客介绍如何使用递归算法计算Fibonacci数列的第N项,通过示例展示了当n为15时,fib(15)等于610。

       fn = 0                     (n=0)
           = 1                     (n=1)
           = fn-1 + fn-2     (n>1)
【输入数据】
        15
【输出数据】
        fib(15)=610
【参考程序】

#include <iostream>
#include <cstdio>
using 
### 实现思路 斐波那契数列是一个经典的递归问题。其定义如下: - 当 $ 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)来缓存中间结果,避免重复计算。 - 使用 **迭代方法** 替代递归,以减少函数调用开销。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值