算法绪论

怎么描述一个算法的优劣呢

使用斐波那契数列递归和非递归算法进行讨论.
斐波那契数列的结构是这样:    \Gamma(n) = \Gamma(n-1)  + \Gamma(n-2) \ || \ 1(n=0或1)\quad\forall n\in\mathbb N,即如图所示 算法

斐波那契数列

相应算法(c语言)

  • 递归展现
int recursion_fibonacci(int n) {
	if (n == 0)return 1;
	if (n == 1)return 1;
	return recursion_fibonacci(n - 1) + recursion_fibonacci(n - 2);
}
复制代码
  • 非递归展现
void nonrecursion_fibonacci(int n) {
	int Fn = 1, Fn_1 = 1, Fn_2 = 1;
	if(n>2)
	{
	    for(int i = 2;i<=n;i++)
		{
			Fn = Fn_1 + Fn_2;
			Fn_2 = Fn_1;
			Fn_1 = Fn;
		}
	}
	printf("数值是%d", Fn);
}
复制代码
  • 完整算法
#include <stdio.h>
#include <time.h>
int recursion_fibonacci(int n) {
	if (n == 0)return 1;
	if (n == 1)return 1;
	return recursion_fibonacci(n - 1) + recursion_fibonacci(n - 2);
}

int nonrecursion_fibonacci(int n) {
	int Fn = 1, Fn_1 = 1, Fn_2 = 1;
	if(n>2)
	{
	    for(int i = 2;i<=n;i++)
		{
			Fn = Fn_1 + Fn_2;
			Fn_2 = Fn_1;
			Fn_1 = Fn;
		}
	}

	printf("数值是%d", Fn);
}
int main(void) {
    clock_t  start, end;
	start = clock();

	printf("数值是%d", recursion_fibonacci(5));
	nonrecursion_fibonacci(5);


	end = clock();
	printf("执行速度%6.3fs", (double)(end-start)/ CLOCKS_PER_SEC);
	
    return 0;
}
复制代码
  • 算法复杂度比较
函数 时间复杂度 空间复杂度
recursion \begin{equation} O(2^n)\end{equation} \begin{equation} O(n)\end{equation}
nonrecursion \begin{equation} O(n)\end{equation} \begin{equation} O(1)\end{equation}
相关文章
相关标签/搜索