日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【斐波那契数列】算法优化笔记

發(fā)布時(shí)間:2024/9/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【斐波那契数列】算法优化笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:斐波那契數(shù)列為:1,1,2,3,5,8…,求第n項(xiàng)?

初步分析
  • 設(shè)an為斐波那契數(shù)列。
  • a1=a2=1;(n<=2)
  • an=a(n-1) + a(n-2);(n>=2)
  • 本章總結(jié)

    【小總結(jié)】
    1.【盡量不用遞歸】
    2.【利用數(shù)據(jù)結(jié)構(gòu)】
    3.【動(dòng)態(tài)規(guī)劃】
    4.【位運(yùn)算】

    【詳細(xì)總結(jié)】
    以下代碼因不同算法而時(shí)間復(fù)雜度不同個(gè)人歸類(lèi)為不同版本,總結(jié)如下。
    1.盡量不要用遞歸,縱使好看,但由于遞歸在內(nèi)存中使用的堆棧的方式,自然是浪費(fèi)空間。
    2.利用數(shù)據(jù)結(jié)構(gòu),數(shù)組,哈希表等優(yōu)化算法。
    3.以下利用到了動(dòng)態(tài)規(guī)劃的滾動(dòng)數(shù)組。
    4.用位運(yùn)算來(lái)代替乘法、除法以及取模。
    5.有數(shù)學(xué)公式用數(shù)學(xué)公式@.@…

    詳細(xì)代碼

    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">數(shù)值n</param>/// <returns>第n項(xiàng)的值</returns>static int fun1(int n){if (n == 1 || n == 2) return 1;else return fun1(n - 1) + fun1(n - 2);}/// <summary>/// 數(shù)組存儲(chǔ)/// </summary>/// <param name="n">數(shù)值n</param>/// <returns>第n項(xiàng)的值</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>/// 滾動(dòng)數(shù)組簡(jiǎn)單版1/// </summary>/// <param name="n">數(shù)值n</param>/// <returns>第n項(xiàng)的值</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>/// 滾動(dòng)數(shù)組簡(jiǎn)單版2/// </summary>/// <param name="n">數(shù)值n</param>/// <returns>第n項(xiàng)的值</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>/// 滾動(dòng)數(shù)組邏輯與版本/// </summary>/// <param name="n">數(shù)值n</param>/// <returns>第n項(xiàng)的值</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());//獲取數(shù)據(jù)nConsole.WriteLine("fun1用時(shí)間" + getCostTime(fun1, n)+"\n");//輸出耗費(fèi)時(shí)長(zhǎng)Console.WriteLine("fun1用時(shí)間" + getCostTime(fun2, n) + "\n");//輸出耗費(fèi)時(shí)長(zhǎng)Console.WriteLine("fun1用時(shí)間" + getCostTime(fun3, n) + "\n");//輸出耗費(fèi)時(shí)長(zhǎng)Console.WriteLine("fun1用時(shí)間" + getCostTime(fun4, n) + "\n");//輸出耗費(fèi)時(shí)長(zhǎng)Console.WriteLine("fun1用時(shí)間" + getCostTime(fun5, n) + "\n");//輸出耗費(fèi)時(shí)長(zhǎng)Console.ReadLine();}/// <summary> /// 獲取此方法的耗費(fèi)時(shí)間 /// </summary>/// <param name="function">方法</param>/// <param name="n">數(shù)值</param>/// <returns>耗費(fèi)時(shí)間</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;}} }

    總結(jié)

    以上是生活随笔為你收集整理的【斐波那契数列】算法优化笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。