PKU软微算法题总结1——斐波那契数

1.Q.爬楼梯(斐波那契数)一共有n个台阶,你一次可以走一个台阶,或者两个台阶。那么,走到台阶顶时,一共有多少种走法。
1阶 2阶 3阶 4阶 n阶
1种 2种(1、2) 3种(111、21、12) 5种(1111、211、112、22、121)(2+3) f(n-1)+ f(n-2)

直接思路:
递归法:时间复杂度:O(2n) ,空间复杂度:O(n)
迭代法:时间复杂度:O(n),空间复杂度:O(1)

#include <iostream>
using namespace std;
#define N 6
int fib1(int n)//递归法
{
	if (n == 0 || n == 1)
		return 1;
	else
		return fib1(n - 1) + fib1(n - 2);
}

int fib2(int n)//迭代法
{
	int a1 = 1;
	int a2 = 1;
	int a3 = 1;
	if (n == 0 || n == 1)
		return 1;
	else
	{		
		for (int j = 0; j < n - 1; j++)
		{
			a3 = a1 + a2;
			a1 = a2;
			a2 = a3;
		}
	}
		return a3;
}
int main()
{
	cout<<fib1(N)<<endl;
	cout << fib2(N)<<endl;
	return 0;
}

二阶矩阵相乘可以得到,算法复杂度到O(log(n))
(这个待学习中…)

发布了16 篇原创文章 · 获赞 3 · 访问量 311

猜你喜欢

转载自blog.csdn.net/bajiaoyu517/article/details/103831873