C語言----斐波那契數列(附源代碼)

? ? ? 各位看官們好,當我寫了上一篇博客楊輝三角后,有一些看官叫我講一下斐波那契數列。對于這個大家應該是有了解的。最簡單的規律就是f(n)=f(n-2)+f(n-1)。就是當前是前兩項之和,然后下標1和0都是1.從第三項開始計算的。那么我們知道規律,那么我們就直接來講講如何實現和實現方法有哪些吧。

遞歸

? ? ? ? 我想大家學習C語言到現在應該看到斐波那契數列應該想到的是遞歸吧。我想遞歸大家應該還知道它的核心思想吧,就是每遞歸一次,那么這個問題就要越靠近我們想要的答案一次,一直遞歸到想要答案就返回。好,那么我們現在想一想怎么搞。那么我們知道我們有特殊情況就是,如果我輸入1和2的話,那么我們得到的值是1.那么我們這個就可以直接寫出來哇。好當我們寫出了特殊情況后,我們來思考正常情況。那么我們也知道我們規律就是前兩項之和。那么我們就直接寫啊,是不是。大家思考一下:


int xixi(int a)
{if (a == 1 || a == 2){return 1;}else{return xixi(a - 1) + xixi(a - 2);}
}
int main()
{int a = 0;printf("請輸入要多少位的斐波那契數\n");scanf("%d", &a);printf("%d ", xixi(a));return 0;
}

? ? ? ? 我們只要不是特殊情況的話,我們只需要在遞歸的時候將前兩項傳來,直到設定的值,那么我們就可以得到結果了。大家思考一次,是吧。代碼很簡單,但是有一個問題就是。遞歸的內存占用太多了。很有可能造成棧溢出。也許大家輸入前面的數字編譯器還是很快的輸出的。但是當我們輸入較大值如100這類的我們就可以明顯的感覺速度很慢了。所以遞歸大家可以知道這個方法但是使用起來限制還是很大了。大家知道有這個辦法就可以了。

for循環

? ? ? okok,當我們寫了遞歸后,我們遞歸其實還是有點難度的,畢竟我們還是需要思考一下,怎么實現的吧。但是我們要是用for循環的,我們從最開始學習C語言的時候我們就知道有個for循環。那么最基礎的知識其實是很有作用的,那么我們來思考一下for循環如何來實現我們的斐波那契數吧。但其實for循環也是比較簡單的,畢竟大家思考一下。我們最基本的規律就是前兩項之和f3,那么我們就創建三個變量吧。一個作為最后的相加項我們最后返回的。然后另外兩個就一個作為前一項f1一個作為前兩項f2。那么這個如何交換值值嘞。首先我們就最開始的時候考慮特殊情況。1和2的時候那么我們就直接從2開始吧,如果我輸入的值是1或者2的話,for本來就等于2了,不執行,然后直接返回f3。那么我們可以確定了f3的初始值為1吧。并且我們現在把特殊情況也處理了。那我們正常的話f3=f1+f2。然后f2=f3。這個是為什么嘞,因為我們大家算f3,是不是就是我們的前一個f3加一個f2但我不能直接寫f3的前一項啊。所以f2就成為上一個f3吧。那f2成為上一個f3那。f1自然而然的變成了上一個的f2了吧。這樣大家是不是就通透了呀。我們將f1,2,3全部設為1.然后for循環從2開始那么就排除了特殊情況。然后最開始就將f3更新,然后f2和f1相繼跟新這樣如果下次沒有更新的話,我們就可以直接確定了返回值f3了。

int xixi(int a)
{int f3 = 1;int f2 = 1;int f1 = 1;for (int y = 2; y < a; y++){f3 = f1 + f2;f1 = f2;f2 = f3;}return f3;
}
int main()
{int a = 0;printf("請輸入要多少位的斐波那契數\n");scanf("%d", &a);printf("%d", xixi(a));return 0;
}

? ? ? ? 大家需要注意一下啊。就是f1與f2更新的順序不要亂哦。不然的話f1也變成上一個f3了。然后就太多的麻煩了。

數組

? ? ? ? OK呀,其實講了上面的兩個方法就差不多了的,但是我還想到了一個方法,就是我們使用數組來實現這個。那大家先想一想數組如何實現這個了。但其實啊。也很簡單與我們的for循環是差不多的。我們上一個for循環是需要實時更新的,但我們數組其實就是很簡單的。我們創建一個較大的數組。然后沒循環一次,那么就往數組里寫入新的值,然后循環到設定值結束,那么就返回這個數組下標的的元素就可以了。那么簡單的思路那我們就直接開始搞吧。

int xixi(int a)
{int i = 0;int arr[100] = {0, 1,1};for (i = 2; i <= a; i++)//從第一項開始{arr[i] = arr[i - 1] + arr[i - 2];}return arr[a];}
int main()
{int a = 0;printf("請輸入要多少位的斐波那契數\n");scanf("%d", &a);printf("%d", xixi(a));return 0;
}

? ? ? ? 大家看看上面咦。為什么我們創建數組的時候開始要給0,1,1的值啊。其實也很簡單就是我們數組下標啊。我們原本計算的都是從1開始的,但是我們數組是下標如果不設置得話,那么下標0為1,設置的值就會大很多,當然是越向后值就比正確值大很多。大家可以下來嘗試一下。

? ? ? 好了,那么我們上面三種方法就差不多了,遞歸方法雖然有,但是可以處理小部分遞歸次數較小的,如果太大了。那么就是會很慢甚至報錯。建議少用用for循環的方法也可以。好了。以上就是本篇博客的內容了。如果還有補充的話,希望大家可以評論區留言。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12478.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

位圖(c++)

文章目錄 1.位圖概念2.位圖的實現3.應用&#xff08;解決整形存在或次數問題&#xff09;3.1存在問題3.2次數問題 5.搜索的方法對比&#xff1a; 1.位圖概念 和哈希一樣&#xff0c;都是一個表來記錄某個元素的個數或者存在與否&#xff1b;不同的是哈希使用的計算機定義的完整…

旅游卡創業的機會在哪里?

在當今社會&#xff0c;旅游已經成為了人們休閑娛樂的重要方式之一。 隨著經濟的發展和人們生活水平的提高&#xff0c;越來越多的人開始追求更高品質的旅游體驗。因此&#xff0c;旅游卡創業應運而生&#xff0c;為游客提供了更加便捷、實惠的旅游服務。那么&#xff0c;旅游…

群輝部署小雅alist實現視聽盛會

最近群輝搭建起來了&#xff0c;開始整蠱影視庫&#xff0c;之前搞過nastool。這次折騰下小雅alist。 1.下載并安裝 直接在群輝的docker里面下載映像 主要映射下端口和文件夾 #token mytoken.txt 獲取地址&#xff1a;https://alist.nn.ci/zh/guide/drivers/aliyundriv…

Git使用(2):遠程倉庫

一、創建遠程倉庫 登錄碼云Gitee - 基于 Git 的代碼托管和研發協作平臺。 點擊右上角&#xff0c;新建倉庫。 創建完成&#xff0c;復制倉庫地址接下來要使用。 二、將idea項目推送到碼云 首先創建本地倉庫VCS -> Create Git Repository。然后選擇Manage Remotes&#xff0…

服務器是網絡中的重要設備

眾所周知&#xff0c;服務器是網絡中的重要設備&#xff0c;要接受少至幾十人、多至成千上萬人的訪問&#xff0c;因此對服務器具有大數據量的快速吞吐、超強的穩定性、長時間運行等嚴格要求。但是&#xff0c;今天我們了解的是GPU服務器&#xff0c;很明顯&#xff0c;從字面上…

機器學習的目的

機器學習的目的是讓計算機能夠從數據中學習并改善性能&#xff0c;以執行特定的任務而無需明確的編程指令。具體來說&#xff0c;機器學習旨在實現以下幾個主要目標&#xff1a; 1. 預測與泛化&#xff1a; 機器學習的一個主要目標是通過學習數據的模式和特征&#xff0c;從而對…

舊衣回收,整個項目環節詳細拆解

日常舊衣服很多人果斷丟垃圾箱&#xff0c;殊不知這背后隱藏著商機。大把人都在掘金的項目。 舊衣回收&#xff0c;眼下市場覆蓋率才占10%。絕對的藍海&#xff0c;干這種項目成本很低。小到自家的舊衣回收能換小錢&#xff0c;大到開公司做分揀撈利潤。 說到這里&#xff0c…

用友hr軟件統一認證與致遠OA單點登錄身份周期管理怎么做

一、引言 隨著企業信息化建設的深入&#xff0c;各類管理軟件如用友HR、致遠OA等已經成為事業單位日常運營不可或缺的工具。用友HR軟件以其強大的人力資源管理功能&#xff0c;幫助企事業單位實現員工信息的集中管理&#xff1b;而致遠OA則以其便捷的辦公流程管理&#xff0c;…

機器學習概念:一些基本概念

目錄 數據集 (Dataset)&#xff1a;用于訓練和評估模型的數據集合。 特征 (Feature)&#xff1a;描述數據的屬性或變量&#xff0c;用于訓練模型。 標簽 (Label)&#xff1a;在監督學習中&#xff0c;與輸入數據相關聯的輸出結果。 模型 (Model)&#xff1a;對數據的某種假…

springcloud簡單了解及上手

springcloud微服務框架簡單上手 文章目錄 springcloud微服務框架簡單上手一、SpringCloud簡單介紹1.1 單體架構1.2 分布式架構1.3 微服務 二、SpringCloud與SpringBoot的版本對應關系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注冊中心3.1 認識和安裝Nacos3.2 配置Nacos3.3 n…

C++ 并發編程指南(11)原子操作 | 11.6、計算機內存結構

文章目錄 一、計算機內存結構1、內存的基本組成2、內存的類型3、內存的結構層次4、CPU架構5、局部性原理6、總結 前言 在探討計算機的運行效率和數據處理能力時&#xff0c;內存結構無疑是一個至關重要的部分。內存&#xff0c;作為計算機系統中的關鍵組件&#xff0c;承擔著存…

vue從入門到精通(一):Vue模板語法

一&#xff0c;模板語法 Vue 使用一種基于 HTML 的模板語法&#xff0c;使我們能夠聲明式地將其組件實例的數據綁定到呈現的 DOM 上。所有的Vue模板都是語法層面合法的 HTML&#xff0c;可以被符合規范的瀏覽器和 HTML 解析器解析。 Vue模板語法有2大類: 插值語法: 功能:用于解…

請介紹下H264的多參考幀技術及其應用場景,并請說明下為什么要有多參考幀?

H.264&#xff08;也稱為H.264/AVC&#xff09;的多參考幀機制是其編碼效率和質量提升的關鍵部分。這個機制允許編碼器在編碼當前幀時&#xff0c;參考多個之前已編碼的幀。這種多參考幀的方法為編碼器提供了更多的選擇&#xff0c;使其能夠更準確地預測當前幀的內容&#xff0…

【保姆級介紹自動化的講解】

&#x1f308;個人主頁: 程序員不想敲代碼啊 &#x1f3c6;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f44d;點贊?評論?收藏 &#x1f91d;希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff0c;讓我們共…

SCP‘s Story

越過“第二夜”的星星&#xff0c;越過“邁克爾連續線”和“禁運線”&#xff0c;在“煤炭之路”最遠的一站&#xff0c;有一顆眼淚。這不是織物或紙上的撕裂&#xff0c;而是現實中的撕裂&#xff0c;是物理定律和常識失效的地方。 有些人稱之為黑洞&#xff0c;銀河系中最大…

【C語言】4.C語言數組(2)

文章目錄 6. 二維數組的創建6.1 ?維數組的概念6.2 ?維數組的創建 7. 二維數組的初始化7.1 不完全初始化7.2 完全初始化7.3 按照?初始化7.4 初始化時省略?&#xff0c;但是不能省略列 8. 二維數組的使用8.1 ?維數組的下標8.2 ?維數組的輸?和輸出 9. 二維數組在內存中的存…

利用一段代碼輕松繞過PHP授權系統

利用一段代碼輕松繞過PHP授權系統 第一步&#xff1a;首先你需要改名全局文件 比如說全局文件 common.php&#xff0c;那么 你將他改為core.php 第二步&#xff1a;創建文件 創建一個文件&#xff0c;和改名前的全局文件名稱一樣&#xff0c;然后把以下代碼復制進去就OK了 …

行列視在做報表之前需要準備哪些前期工作

行列視是一款功能強大的生產數據分析和報表生成工具&#xff0c;使用它進行報表制作之前&#xff0c;確實需要一些前期準備工作&#xff0c;以確保報表的準確性和有效性。以下是進行行列視報表制作前需要準備的一些關鍵步驟&#xff1a; 1.明確報表需求&#xff1a; - 確定報表…

【MySQL01】【 Explain 命令詳解】

文章目錄 一、前言二、Explain 概覽三、Explain 詳解1. id2. select_type3. table4. type5. possible_keys6. key7. key_len8. ref9. rows10. filtered11. extra 列 四、補充1. EXPLAIN 擴展1.1 Extend EXPLAIN1.2 JSON 格式的執行計劃 2. Intersection、Union、Sort-Union 索引…

使用C++實時讀取串口數據(window使用已編譯LibModbus庫并用QT實現一個實時讀取串口數據)

先看這篇文章&#xff0c;寫得很詳細: QT應用篇 四、window編譯LibModbus庫并用QT編寫一個Modbus主機 手把手教學 編譯好的LibModbus庫可以在上面文章里下載&#xff0c;也可以在我的鏈接里下載&#xff1a; 為了在Qt Creator中創建新項目并嵌入上述C代碼&#xff0c;請執行以…