遞迴與分治

2021-10-13 15:33:32 字數 1671 閱讀 6504

fibonacci數列

無窮數列1,1,2,3,5,8,13,21,34,55,……,稱為fibonacci數列。它可以遞迴地定義為:

第n個fibonacci數可遞迴地計算如下:

int fibonacci(int n)

編寫完整的主函式,分別記錄利用上述遞迴函式求第47, 48, 49, 50, 51,52個fibonacci數所花費的時間。

#include

#include

#include

intfibonacci

(int n)

intmain()

return0;

}

截圖:

2)將遞迴函式改為尾遞迴,或者是遞推函式,求第47, 48, 49, 50, 51,52個fibonacci數所花費的時間,觀察效率是否得到提高。

#include

#include

#include

#include

using

namespace std;

unsigned

longf(

int n,

int one,

int two)

intmain()

截圖:

2.角谷定理。輸入乙個自然數,若為偶數,則把它除以2,若為奇數,則把它乘以3加1。經過如此有限次運算後,總可以得到自然數值1。求經過多少次可得到自然數1。

3.輸入乙個正整數,呼叫遞迴函式,一次輸出該整數的各位數字。如輸入為1324657,則輸出為1 3 2 4 6 5 7

#include

intf

(int n)

intmain()

半數集問題。

問題描述:給定乙個自然數n,由n開始可以依次產生半數集set(n)中的數如下:

(1) ;

(2) 在n的左邊加上乙個自然數,但該自然數不能超過最近新增的數的一半;

(3) 按此規則進行處理,直到不能再新增自然數為止。

例如,set(6)=,半數集set(6)中有6個元素。

輸入:整數n(0

#include

intset

(int n)

return x;

}int

main()

分治與遞迴

分治與遞迴 分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。對這k個子問題分別求解。如果子問題的規模仍然不夠小,則再劃分為k個子問題,如此遞迴的進行下去,直到問題規模足夠小,很容易求出其解為止。將求出的小規模的問題的解合併為乙個更大規模的問題的解...

遞迴與分治

一 1 求階乘 int factorial int n 2 fibonacci函式 int fibonacci int n 3 全排列 1 字串的全排列 主函式見 2 int permutation char a,int k,int m permutation arr,0,n 1 return 0 ...

分治回溯 遞迴與分治

程式呼叫自身的程式設計技巧稱為遞迴 public static void show 它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 量。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。...