最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列

 更新時(shí)間:2017年10月31日 08:47:02   作者:Vit_rose  
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列

因?yàn)樽约簩?duì)遞歸還是不太熟練,于是做POJ1753的時(shí)候就很吃力,就是翻棋子直到棋盤(pán)上所有棋子的顏色一樣為止,求最少翻多少次,方法是枚舉遞歸。然后就打算先做另一道遞歸的題(從數(shù)組中取出n個(gè)元素的組合),但是同樣在遞歸的問(wèn)題上不太理解。好吧,于是復(fù)習(xí)CPP,在第229頁(yè)的時(shí)候,看到了斐波那契數(shù)列,回想起之前做過(guò)的一道題目,發(fā)現(xiàn)可以用遞歸的方法來(lái)做。于是決定優(yōu)化一下之前的代碼。

以下這段摘自《C primer plus》

斐波那契數(shù)列的定義如下:第一個(gè)和第二個(gè)數(shù)字都是1,而后續(xù)的每個(gè)數(shù)字是其前兩個(gè)數(shù)字之和,例如,數(shù)列中前幾個(gè)數(shù)字是1,1,2,3,5,8和13?!旅嫖覀儎?chuàng)建一個(gè)函數(shù),它接受一個(gè)正整數(shù)n作為參數(shù),返回相應(yīng)的斐波那契數(shù)值。

首先,關(guān)于遞歸深度,遞歸提供了一個(gè)簡(jiǎn)單的定義。如果調(diào)用Fibonacci(),當(dāng)n為1或2時(shí)Fibonacci(n)應(yīng)返回1;對(duì)于其他數(shù)值應(yīng)返回Fibonacci(n-1)+Fibonacci(n-2);

long Fibonacci(n)
{
  if (n > 2)
    return Fibonacci(n-1)+Fibonacci(n-2);
  else
    return 1;
}

然后是兔子總數(shù)問(wèn)題。

有一對(duì)兔子,從出生后第三個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后又生一對(duì)兔子,假如兔子都不死,每個(gè)月兔子對(duì)數(shù)為多少?

思考這道題的時(shí)候,如果你簡(jiǎn)單的推算一下,會(huì)發(fā)現(xiàn)兔子每個(gè)月的對(duì)數(shù)就是斐波那契數(shù)列。

第一個(gè)月:1對(duì);
第二個(gè)月:1對(duì);
第三個(gè)月:2對(duì);
第四個(gè)月:3對(duì):
第五個(gè)月:5對(duì):
第六個(gè)月:8對(duì);
……

我之前做這道題的時(shí)候,覺(jué)得思路很簡(jiǎn)單,就是從第三個(gè)月起,求每個(gè)月的兔子數(shù)時(shí),只要把這個(gè)月的前兩個(gè)月總數(shù)相加。
這是我之前的代碼,用f1和f2表示月。:

#include<stdio.h>
int main()
{
  int f1,f2;
  int month,ct;
  printf("請(qǐng)輸入月份:");
  scanf("%d",&month);
  if(month<=2)
    printf("兩只。\n");
  if (month > 2)
  {
    f1 = f2 = 1;
    ct = 0;
    while(ct < month -2){
      f1 = f1+f2;
      ct += 1;
      f2 = f1+f2;
      ct += 1;
    }
    if (month %2 == 0){
      printf("第 %d 個(gè)月的兔子對(duì)數(shù)為:%d.\n",month,f2);
    }
    if (month %2 == 1){
      printf("第 %d 個(gè)月的兔子對(duì)數(shù)為:%d.\n",month,f1);
    }
  }
  return 0;
}

其實(shí)這個(gè)代碼離遞歸就差一步,很接近了。但是我當(dāng)時(shí)完全沒(méi)有想到。

這是我重新修改之后的代碼:

#include<stdio.h>
long Fibonacci(n)
{
  if (n > 2)
    return Fibonacci(n-1)+Fibonacci(n-2);
  else
    return 1;
}
int main()
{
  long num;
  int month;
  printf("請(qǐng)輸入月份:");
  scanf("%d",&month);
  num = Fibonacci(month);
  printf("這個(gè)月的兔子對(duì)數(shù)為%d.\n",num);
  return 0;
}

只是很簡(jiǎn)單的修改,但是代碼就整潔易懂了很多,也學(xué)到了新內(nèi)容。

工欲善其事必先利其器,共勉。

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Linux下C語(yǔ)言修改進(jìn)程名稱(chēng)的方法

    Linux下C語(yǔ)言修改進(jìn)程名稱(chēng)的方法

    這篇文章主要介紹了Linux下C語(yǔ)言修改進(jìn)程名稱(chēng)的方法,涉及Linux下使用C語(yǔ)言操作進(jìn)程的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C語(yǔ)言使用DP動(dòng)態(tài)規(guī)劃思想解最大K乘積與乘積最大問(wèn)題

    C語(yǔ)言使用DP動(dòng)態(tài)規(guī)劃思想解最大K乘積與乘積最大問(wèn)題

    Dynamic Programming動(dòng)態(tài)規(guī)劃方法采用最優(yōu)原則來(lái)建立用于計(jì)算最優(yōu)解的遞歸式,并且考察每個(gè)最優(yōu)決策序列中是否包含一個(gè)最優(yōu)子序列,這里我們就來(lái)展示C語(yǔ)言使用DP動(dòng)態(tài)規(guī)劃思想解最大K乘積與乘積最大問(wèn)題
    2016-06-06
  • C++中單調(diào)棧的基本性質(zhì)介紹

    C++中單調(diào)棧的基本性質(zhì)介紹

    這篇文章主要介紹了單調(diào)棧的基本性質(zhì)介紹,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++實(shí)現(xiàn)簡(jiǎn)單24點(diǎn)游戲

    C++實(shí)現(xiàn)簡(jiǎn)單24點(diǎn)游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單24點(diǎn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語(yǔ)言SQLite3事務(wù)和鎖的操作實(shí)例

    C語(yǔ)言SQLite3事務(wù)和鎖的操作實(shí)例

    這篇文章主要介紹了C語(yǔ)言SQLite3事務(wù)和鎖的操作,結(jié)合完整實(shí)例形式分析了C語(yǔ)言針對(duì)SQLite3數(shù)據(jù)庫(kù)的事務(wù)與鎖相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • 用C語(yǔ)言實(shí)現(xiàn)單鏈表的各種操作(一)

    用C語(yǔ)言實(shí)現(xiàn)單鏈表的各種操作(一)

    本篇文章是對(duì)用C語(yǔ)言實(shí)現(xiàn)單鏈表的各種操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中獲取字符串長(zhǎng)度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別(推薦)

    C++中獲取字符串長(zhǎng)度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別(推薦)

    在C++中計(jì)算長(zhǎng)度的函數(shù)有四種,它們分別是sizeof()?,size(),strlen(),str.length(),這篇文章主要介紹了C++中獲取字符串長(zhǎng)度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別,需要的朋友可以參考下
    2023-02-02
  • Qt項(xiàng)目打包的實(shí)現(xiàn)步驟

    Qt項(xiàng)目打包的實(shí)現(xiàn)步驟

    本文主要介紹了Qt項(xiàng)目打包的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++Vector容器常用函數(shù)接口詳解

    C++Vector容器常用函數(shù)接口詳解

    最近我學(xué)習(xí)了C++中的STL庫(kù)中的vector容器,對(duì)于常用容器,我們不僅要會(huì)使用其常用的函數(shù)接口,我們還有明白這些接口在其底層是如何實(shí)現(xiàn)的。所以特意整理出來(lái)一篇博客供我們學(xué)習(xí)
    2022-08-08
  • 2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)

    2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)

    下面小編就為大家?guī)?lái)一篇2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論

宿州市| 青冈县| 湟中县| 资中县| 静乐县| 赫章县| 石嘴山市| 衡山县| 金门县| 绥江县| 山东| 洪洞县| 清河县| 盘锦市| 尼木县| 正宁县| 秦安县| 儋州市| 建湖县| 柘荣县| 临安市| 延庆县| 南江县| 舞钢市| 京山县| 孝义市| 青河县| 永德县| 临沧市| 尼木县| 根河市| 南昌市| 嘉祥县| 沧源| 东阳市| 虎林市| 延长县| 页游| 弥渡县| 苏尼特左旗| 渝中区|