斐波拉契数列
【1】题目
【2】思路
(1)直接调用递归,输入的数过大后会产生指数级的时间消耗;
(2)累加计算,时间消耗少。
【3】代码
#include <iostream>
#include<vector>
#include<time.h>
using namespace std;
//原始的斐波拉契递归方法,重复计算,指数级算法
long long Fibonacci1(int n)
{
int result[2] = { 0,1 };
if (n<2){return result[n];}
return Fibonacci1(n - 1) + Fibonacci1(n - 2);
}
//o(n)级别的算法
long long Fibonacci2(int n)
{
long long fibN = 0;
int result[2] = { 0,1 };
if (n < 2)
{
fibN= result[n];
}
long long firstvalue = result[0];
long long secondvalue = result[1];
for (size_t i =2; i <= n; i++)
{
fibN = firstvalue + secondvalue;
firstvalue = secondvalue;
secondvalue = fibN;
}
return fibN;
}
void main()
{
clock_t startTime, endTime;
startTime = clock();
//算法实现
long long value1 = Fibonacci1(100);
cout << value1 << endl;
endTime = clock();
cout << "Totle Time : " << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
clock_t startTime1, endTime1;
startTime1 = clock();
//算法实现
long long value2 = Fibonacci2(100);
cout << value2 << endl;
endTime1 = clock();
cout << "Totle Time : " << (double)(endTime1 - startTime1) / CLOCKS_PER_SEC << "s" << endl;
}
青蛙跳台阶
【1】题目
【2】思路
【3】代码
//青蛙跳台阶 一次可以跳1级一次可以跳2级;
long long StarNumber(int n)
{
long long number = 0;
int result[3] = { 0,1,2 };
if (n<=2)
{number = result[n];}
int firstnumber = 1;
int secondnumber = 2;
for (size_t i = 3; i <= n; i++)
{
number = firstnumber + secondnumber;
firstnumber = secondnumber;
secondnumber = number;
}
return number;
}