计算Fibonacci数列

上机内容:用动态分配空间的方法计算Fibonacci数列的前30项并存储到动态分配的空间中

上机目的:学习Fibonacci数列算法

我的程序:

#include<iostream>
using namespace std;
void main()
{
	int *p=new int[30];
	*p=1;
	*(p+1)=1;
	cout<<*p<<"\t"<<*(p+1)<<"\t";
	p=p+2;
	for(int i=3;i<=30;i++)
	{
		*p=*(p-1)+*(p-2);
		cout<<*p<<"\t";
		if(i%5==0)
			cout<<endl;
		p++;
	}
	
}


运行结果:


体会总结:

说实话很久很久都没有编程了,感觉就像没有学过一样,全部还给老师了。编程需要天天去编,需要琢磨,浪费时间还不如多编程。

因为写完一个程序以及调试完是一件非常开心的事情。

这个虽是学过,但是现在觉得陌生了。这个是用循环实现的,还可以使用递归的方法实现。

### 计算斐波那契数列的方法 #### 使用迭代法计算斐波那契数列 迭代方法是一种高效的方式,通过循环来逐步构建斐波那契序列。这种方法的时间复杂度为O(n),空间复杂度可以优化到O(1)[^1]。 ```python def fibonacci_iterative(n): if n <= 0: return [] elif n == 1: return [1] fib_sequence = [1, 1] for i in range(2, n): next_value = fib_sequence[-1] + fib_sequence[-2] fib_sequence.append(next_value) return fib_sequence ``` #### 使用递归法计算斐波那契数列及其调用次统计 递归方式虽然直观但是效率较低,特别是对于较大的n值会重复很多次相同的计算。为了记录每次递归调用的情况,在这里定义了一个辅助变量`count`用于计,并且在每一次递归返回时更新这个值[^2]。 ```c #include <stdio.h> int fib(int n, int *count); void main() { int n; printf("Input n:"); scanf("%d", &n); for (int i = 1; i <= n; ++i) { int count = 0; printf("Fib(%d)=%d, count=%d\n", i, fib(i, &count), count); } } // 定义fib函并传递指针参用来累计调用次 int fib(int n, int *count){ (*count)++; if (n <= 0) return 0; else if (n == 1 || n == 2) return 1; else return fib(n-1, count) + fib(n-2, count); } ``` 上述C语言代码实现了带有计功能的递归版本斐波那契数列生成器[^3]。 #### 动态规划解法 动态规划能够有效减少冗余运算,它保存已经得的结果从而避免不必要的重新计算。这种方式不仅提高了性能而且保持了算法逻辑上的清晰性。 ```python def fibonacci_dynamic_programming(n): dp = [0]*(n+1) dp[1], dp[2] = 1, 1 for i in range(3, n+1): dp[i] = dp[i-1]+dp[i-2] return dp[:n] ``` 以上三种不同的编程思路都可以成功解决斐波那契数列问题,具体选择哪种取决于实际应用场景和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值