题目:斐波那契数列为:1,1,2,3,5,8…,求第n项?

初步分析
  1. 设an为斐波那契数列。
  2. a1=a2=1;(n<=2)
  3. an=a(n-1) + a(n-2);(n>=2)

本章总结

【小总结】
1.【尽量不用递归】
2.【利用数据结构】
3.【动态规划】
4.【位运算】

【详细总结】
以下代码因不同算法而时间复杂度不同个人归类为不同版本,总结如下。
1.尽量不要用递归,纵使好看,但由于递归在内存中使用的堆栈的方式,自然是浪费空间。
2.利用数据结构,数组,哈希表等优化算法。
3.以下利用到了动态规划的滚动数组。
4.用位运算来代替乘法、除法以及取模。
5.有数学公式用数学公式@.@…

详细代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;namespace Fibonacci_Sequence
{class Program{/// <summary>/// 垃圾递归fun1/// </summary>/// <param name="n">数值n</param>/// <returns>第n项的值</returns>static int fun1(int n){if (n == 1 || n == 2) return 1;else return fun1(n - 1) + fun1(n - 2);}/// <summary>/// 数组存储/// </summary>/// <param name="n">数值n</param>/// <returns>第n项的值</returns>static int fun2(int n){if (n == 1 || n == 2)return 1;else{int[] array = new int[n + 1];array[1] = array[2] = 1;for (int i = 3; i < n + 1; i++){array[i] = array[i - 1] + array[i - 2];}return array[n];}}/// <summary>/// 滚动数组简单版1/// </summary>/// <param name="n">数值n</param>/// <returns>第n项的值</returns>static int fun3(int n){if (n == 1 || n == 2)return 1;else{int[] array = new int[2];array[0] = array[1] = 1;for (int i = 2; i < n; i++){array[1] = array[0] + array[1];array[0] = array[1] - array[0];}return array[1];}}/// <summary>/// 滚动数组简单版2/// </summary>/// <param name="n">数值n</param>/// <returns>第n项的值</returns>static int fun4(int n){if (n == 1 || n == 2)return 1;else{int[] array = new int[2];array[0] = array[1] = 1;for (int i = 2; i < n; i++){array[i % 2] = array[(i-1) % 2] + array[(i - 2) % 2];}return array[(n+1)  % 2];//或//for (int i = 3; i <= n; i++)//{//    array[i % 2] = array[(i - 1) % 2] + array[(i - 2) % 2];//}//return array[n % 2];}}/// <summary>/// 滚动数组逻辑与版本/// </summary>/// <param name="n">数值n</param>/// <returns>第n项的值</returns>static int fun5(int n){if (n == 1 || n == 2)return 1;else{int[] array = new int[2];array[0] = array[1] = 1;for (int i = 3; i <= n; i++){array[i & 1] = array[(i - 1) & 1] + array[(i - 2) & 1];}return array[n & 1];}}static void Main(string[] args){int n = int.Parse(Console.ReadLine().ToString());//获取数据nConsole.WriteLine("fun1用时间" + getCostTime(fun1, n)+"\n");//输出耗费时长Console.WriteLine("fun1用时间" + getCostTime(fun2, n) + "\n");//输出耗费时长Console.WriteLine("fun1用时间" + getCostTime(fun3, n) + "\n");//输出耗费时长Console.WriteLine("fun1用时间" + getCostTime(fun4, n) + "\n");//输出耗费时长Console.WriteLine("fun1用时间" + getCostTime(fun5, n) + "\n");//输出耗费时长Console.ReadLine();}/// <summary>        /// 获取此方法的耗费时间        /// </summary>/// <param name="function">方法</param>/// <param name="n">数值</param>/// <returns>耗费时间</returns>static long getCostTime(Func<int, int> function, int n){Stopwatch sw = new Stopwatch();sw.Start();Console.WriteLine("值:" +function(n));sw.Stop();return sw.ElapsedMilliseconds;}}
}

【斐波那契数列】算法优化笔记相关推荐

  1. PHP 算法之斐波那契数列算法 计算出生兔子的数量

    <斐波那契数列算法> 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:一对兔子也 ...

  2. 斐波那契数列递归算法优化

    一.前言 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765, ...

  3. Php斐波那契数列尾递归优化,递归优化的这三种方式你知道吗?

    估计找工作的,都会碰到面试官老是问道"递归算法",感同身受,前段时间面试的时候,就有一家问道这个问题,是非常典型的问题.在前面一篇世界上有哪些代码量很少,但很牛逼很经典的算法或项目 ...

  4. 斐波那契数列算法(C#)

    上周抽了一天的时间去6家公司面试,时间太紧都是马马虎虎的,好在这趟面试还是有很多收获的,由此可见自己的理论功底真是差劲的要死,还有语言表达能力. 调侃的来说混了这么久,没有衣××的理论功底,只有雷×× ...

  5. 斐波那契数列递归优化

    背景:今天看网课提到了斐波那契数列使用递归效率过低的问题,于是自己写代码使用递归求第100项,出去吃完早饭回来还没跑完...好吧,需求来了,我们来开始优化吧!

  6. 斐波拉契数列——算法

    斐波拉契数列 题目描述 斐波那契数列是一组第一位F1和第二位F2为1,从第三位开始,后一位是前两位和的一组递增数列Fn=Fn-1+Fn-2. 那么当n比较大时,Fn也非常大,现在我们想知道,第n项,F ...

  7. 斐波那契数列及其优化

    菲波那契数列定义为:f(1) = 1; f(2) = 1; 当n>2时,f(n) = f(n-1) + f(n-2),输入n,求菲波那契数列的第n项.要求:用递归函数求菲波那契数列的第n项. 1 ...

  8. Python斐波那契数列算法

    第一种.函数求裴波那契数列: def func(num):if n==1 or n==2: # 如果n等于1或者2return 1 # 返回1else: # 否则return func(n-1)+fu ...

  9. 斐波那契Fibonacci 算法优化

    方法一: 递归法 int Fib(int n){if(n==1 || n==2) return 1;return Fib(n-1)+Fib(n-2); } 递归法的时间复杂度为o(2^n). 递归算法 ...

  10. 斐波那契数列算法c语言实现

    有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法.#include <stdio.h> int n,m,i,j; i ...

最新文章

  1. 死亡空间2显卡测试软件,《死亡空间3》画质分辨率及硬件性能测试
  2. LINUX内核分析第八周总结:进程的切换和系统的一般执行过程
  3. java 播放.pcm文件,java播发PCM文件
  4. C/C++信息隐写术(四)之大程序藏入BMP文件
  5. Flink流处理操作符
  6. (32) css—opcity属性
  7. 关于我的文章说明及联系方式
  8. Futter基础第2篇: 实现文本、容器【Text、Container】
  9. easypoi 语法_知识点总结及语法学习资料及视频
  10. 机器学习基础---回归方法---支持向量回归(SVR)
  11. html怎么导航栏中加边框,html – 使用CSS在导航栏中显示边框三角形
  12. python图片识别文字开源库Easyocr使用
  13. java 视频边下边播,VideoViewDemo android 播放器,支持边下边播 238万源代码下载- www.pudn.com...
  14. java文字手写识别_【手写文字识别】-JavaAPI示例代码
  15. as3 同屏1000+动画,不掉帧。解决方案。
  16. 计算机时间转换工具,计算机时间的转换
  17. 图构建:领域本体设计原则与动态本体
  18. Wowza 的Http扩展 (Publish State)
  19. 二维码的扫描和生成二维码
  20. 预估市场过万亿,“即时零售”到底是什么来头?

热门文章

  1. RoFormerV2:自然语言理解的极限探索
  2. 微软、UIUC韩家炜组联合出品:少样本NER最新综述
  3. Transformer性能被高估?DeepMind动态评估模型的时间泛化能力
  4. 史上最全!近千篇机器学习自然语言处理论文!都这儿了
  5. SIGIR 2020 | 第四范式提出深度稀疏网络模型,显著提升高维稀疏表数据分类效果...
  6. Let's Fork | 11 款 Github 最新「机器学习」开源项目
  7. AIProCon在线大会笔记之清华大学唐杰教授:人工智能的下一个十年
  8. HDU 1175 连连看 dfs+剪枝
  9. html中inline函数,开窗函数和窗口函数区别 inline函数和一般的函数有什么不同
  10. oracle 安装及使用方法,Oracle安装及使用小结