C語言新手練習(xí)題之求第n個(gè)斐波那契數(shù)
前言
在C語言中,分別用遞歸和非遞歸兩種方法實(shí)現(xiàn)求第n個(gè)斐波那契數(shù)
一、思路
首先分析一下關(guān)于斐波那契數(shù)列的原理:
第一個(gè)和第二個(gè)數(shù)都是1,之后的每個(gè)數(shù)都是前兩個(gè)數(shù)之和,即:
1,1,2,3,5,8,……
1.非遞歸
用到了循環(huán)相關(guān)的知識(shí),
當(dāng)n>2的時(shí)候進(jìn)入循環(huán),將前兩個(gè)數(shù)相加得到第三個(gè)數(shù);
當(dāng)n<=2的時(shí)候跳出循環(huán)。
2.遞歸
觀察斐波那契數(shù)列可以得到一個(gè)公式:
根據(jù)這個(gè)公式就能進(jìn)行遞歸。當(dāng)n>2的時(shí)候進(jìn)行遞歸,當(dāng)n = 1或n = 2時(shí)返回1。
二、源代碼以及運(yùn)行截圖
為了方便大家的交流和學(xué)習(xí),我將程序源代碼和運(yùn)行截圖放置在下方。
非遞歸:
源代碼:
#include<stdio.h> //遞歸和非遞歸分別實(shí)現(xiàn)求第n個(gè)斐波那契數(shù) //非遞歸 int main() { int i = 1; int j = 1; int temp = 0; int n = 0; int fib = 0; scanf("%d", &n); while (n > 0) { if (n > 2) { temp = j; j = i + j; i = temp; } else fib = j; n--; } printf("%d", fib); return 0; }
運(yùn)行截圖:
遞歸:
源代碼:
//遞歸 int Fib(int n) { if (n > 2) { return Fib(n - 1) + Fib(n - 2); } else { return 1; } } int main() { int n = 0; scanf("%d", &n); while (1) { if (n <= 0) { printf("輸入錯(cuò)誤請重新輸入:>"); } else { printf("%d\n", Fib(n)); break; } } return 0; }
運(yùn)行截圖:
總結(jié)
以上就是今天要講的內(nèi)容,本文簡單的介紹了用C語言如何求解第n個(gè)斐波那契數(shù)的兩種思路,還進(jìn)一步展示了代碼的運(yùn)行結(jié)果驗(yàn)證了作者的思路。
到此這篇關(guān)于C語言新手練習(xí)題之求第n個(gè)斐波那契數(shù)的文章就介紹到這了,更多相關(guān)C語言求第n個(gè)斐波那契數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10c++靜態(tài)局部變量和靜態(tài)函數(shù)示例
這篇文章主要介紹了c++靜態(tài)局部變量和靜態(tài)函數(shù)示例,需要的朋友可以參考下2014-04-04C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表去重的實(shí)例
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表去重的實(shí)例的相關(guān)資料,這里提供了題目及實(shí)例代碼,需要的朋友可以參考下2017-07-07