【基础】(递归)菲波那契数列

题目描述
描述菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数a,要求菲波那契数列中第a个数是多少。
输入
输入第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 20)
输出
输出输出有n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数的大小
样例输入

4
5
2
19
1

样例输出

5
1
4181
1

解答代码:

#include<stdio.h>
int fib(int n)
{
	if(n<=1)
		return n;
	return fib(n-1)+fib(n-2);
}
int main()
{
	int n,i,num[100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&num[i]);
	for(i=0;i<n;i++)
		printf("%d\n",fib(num[i]));
	return 0;
}
以下是递归实现斐波那契数列的代码示例: ### C++ 实现 ```cpp #include <iostream> using namespace std; int fibonacci(int n) { if (n == 0) { // 基础情况 return 0; } if (n == 1) { // 基础情况 return 1; } return fibonacci(n - 1) + fibonacci(n - 2); // 递归调用 } int main() { int index; cout << "请输入斐波那契数列的索引: "; cin >> index; cout << "斐波那契数列第 " << index << " 项的值为: " << fibonacci(index) << endl; return 0; } ``` 上述代码通过递归方式实现了斐波那契数列的计算,其中基础情况分别处理 `n=0` `n=1` 的情形[^1]。 --- ### Java 实现 ```java import java.util.Scanner; public class FibonacciExample { public static int fibonacci(int n) { if (n == 0) { // 基础情况 return 0; } if (n == 1) { // 基础情况 return 1; } return fibonacci(n - 1) + fibonacci(n - 2); // 递归调用 } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入斐波那契数列的索引: "); int index = scanner.nextInt(); System.out.println("斐波那契数列第 " + index + " 项的值为: " + fibonacci(index)); scanner.close(); } } ``` 此代码片段同样基于递归逻辑来求解斐波那契数列中的某一项值[^2]。 --- ### Python 实现 ```python def fibonacci(n): if n == 0: # 基础情况 return 0 elif n == 1: # 基础情况 return 1 else: return fibonacci(n - 1) + fibonacci(n - 2) # 递归调用 index = int(input("请输入斐波那契数列的索引: ")) print(f"斐波那契数列第 {index} 项的值为: {fibonacci(index)}") ``` Python 版本的递归函数也遵循相同的定义模式,即利用两个基础条件终止递归并逐步回溯计算结果[^4]。 --- ### 性能分析 尽管递归方法简洁易懂,但由于其重复计算子问题的特点,在大规模数据下效率较低。例如,当计算较大的斐波那契数值时,时间复杂度会呈数级增长 \(O(2^n)\)[^3]。因此,对于性能敏感的应用场景,可以考虑采用动态规划或其他优化技术替代纯递归方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值