国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++基本算法思想之遞推算法思想

2020-01-26 15:45:07
字體:
來源:轉載
供稿:網友

遞推算法是非常常用的算法思想,在數學計算等場合有著廣泛的應用。遞推算法適合有明顯公式規律的場合。

遞推算法基本思想
遞推算法是一種理性思維莫斯的代表,根據已有的數據和關系,逐步推到而得到結果。遞推算法的執行過程如下:

(1)根據已知結果和關系,求解中間結果。

(2)判斷是否達到要求,如果沒有達到,則繼續根據已知結果和關系求解中間結果。如果滿足要求,則表示尋找到一個正確答案。

遞推算法需要用戶知道答案和問題之間的邏輯關系。在許多數學問題中,都有明確的計算公式可以遵循,因此可以采用遞推算法來實現。

遞推算法示例
數學里面的斐波那契數列是一個使用遞推算法的經典例子。

13世紀意大利數學家斐波那契的《算盤書》中記載了典型的兔子產仔問題,其大意如下:

如果一對一個月大的兔子以后每一個月都可以生一對小兔子,而一對新生的兔子出生兩個月才可以生出小兔子。也就是,1月份出生,3月份開始產仔。那么假定一年內沒有產生兔子死亡事件,那么1年之后共有多少對兔子呢?

1.遞歸算法
我們來分析一下兔子產仔問題。我們先逐月看每月兔子的對數。

第一個月:1對兔子;

第二個月:1對兔子;

第三個月:2對兔子;

第四個月:3對兔子;

第五個月:5對兔子;

第六個月:8對兔子;

………………

從上面可以看出,從第三個月開始,每個月的兔子總對數等于前兩個月兔子數的總和。相應的計算公式如下:

第n個月兔子總數Fn=Fn-1+Fn-2。

這里初始第一個月的兔子數F1=1,第二個月的兔子數F2=1。

可以用遞歸公式來求解。為了通用型的方便,我們可以編寫一個算法,用于計算斐波那契數列問題,按照這個思慮來編寫相應的兔子產仔問題的求解算法,示例代碼如下:

復制代碼 代碼如下:

/*
輸入參數n為經歷的時間(單位是月),程序中通過遞歸調用來實現斐波那契數列的計算。
*/
int Fibonacci(n)
{
 int t1,t2;
 if(n>0)
 {
  if(n==1||n==2)
  {
   return 1;
  }
  else
  {
   t1=Fibonacci(n-1);
   t2=Fibonacci(n-2);
   return t1+t2;
  } 
 }
 else
 {
  return 0;
 }
}

遞歸算法求解兔子產仔問題
有了上述通過的兔子產仔問題算法后,我們可以求解任意的此類問題。這里給出完整的兔子產仔問題求解代碼:
復制代碼 代碼如下:

#include<iostream>
using namespace std;
/*
輸入參數n為經歷的時間(單位是月),程序中通過遞歸調用來實現斐波那契數列的計算。
*/
int Fibonacci(int n)
{
 int t1,t2;
 if(n>0)
 {
  if(n==1||n==2)
  {
   return 1;
  }
  else
  {
   t1=Fibonacci(n-1);   //遞歸調用獲取F(n-1)
   t2=Fibonacci(n-2);   //遞歸調用獲取F(n-2)
   return t1+t2;
  } 
 }
 else
 {
  return 0;
 }
}
int main()
{
 int n,num;
 cout<<"遞推算法求解兔子產仔問題:"<<endl;
 cout<<"請輸入時間:"<<endl;
 cin>>n;
 num=Fibonacci(n);
 cout<<"經過"<<n<<"個月之后"<<endl;
 cout<<"兔子的數量為:"<<num<<"對"<<endl;
 return 0;
}

執行該程序,用戶輸入12,得到如圖結果:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 克拉玛依市| 绥中县| 阿拉善左旗| 嫩江县| 大城县| 温泉县| 平舆县| 玉环县| 滁州市| 若羌县| 土默特左旗| 西充县| 鄂州市| 常宁市| 太谷县| 大荔县| 广昌县| 绥中县| 汝阳县| 攀枝花市| 龙游县| 武山县| 英德市| 阜新市| 华亭县| 河北省| 宽城| 长治县| 溆浦县| 南充市| 武义县| 尼玛县| 伊川县| 南郑县| 镇赉县| 连江县| 偏关县| 黔西| 美姑县| 西盟| 内黄县|