遞迴 遞迴 遞迴 深入淺出

2021-04-27 22:00:52 字數 2127 閱讀 4911

遞迴是種思想,不是演算法。

乙個演算法,你用遞迴去實現,它就是遞迴演算法;你用迴圈去實現,它就是非遞迴演算法。遞迴與迴圈一一對應,大多數程式語言都支援迴圈,但不一定支援遞迴。

乙個大問題,分解成類似的小問題,遞迴只用一句話就能描述這些「重複工作」,**那叫乙個簡單!想想這句話的威力都覺得很牛b!

遞迴演算法簡單而又經典的例子有:n!、

fibonacci

、hanoi

、回溯、樹遍歷、圖搜尋。敲**的時候,遞迴反映為

func()

裡呼叫func()

,當然傳入的形參是不一樣的,而且遞迴必須要有

exit door

(不然遞迴到哪天才是個頭呀,一直往深了遞迴,

stack

非給溢位不可,通常

100層以上的遞迴就會

overflow

了)。遞迴演算法其實是低效的,每次遞迴到下一層,系統都要為這一層記錄返回位址、區域性變數開闢

stack

空間,返回上一層的時候系統還要花時間刪掉這些東東,系統真累!

下面看一下

honoi

示例:#include

void move(char x,char y)

main()

void hanoi(int n,char one,char two,char three)

} /*n>=2

時,移動分三步:

step1: 把a

上的n-1

個圓盤移到b上;

step2: 把a

上的乙個圓盤移到c上;

step3: 把b

上的n-1

個圓盤移到c上;

*/迴圈與遞迴是一對一的,下面給出最簡單的示例:

int n=5;

int a=;

int main()

int sum2(int n)

假如你把演算法設計成了遞迴形式,再用

stack

去模擬消遞迴,效果不一定就好,你只是做了系統做的事情。所以,不要盲目相信非遞迴演算法就比遞迴演算法效率高,如果消遞迴技術不好,效率還不及原來的呢。

做些練習鞏固一下吧,用遞迴的方法完成:

1. 求陣列中的最大數

2. 求

n個整數的積

3. 求

n個整數的平均值

4. 求

n個自然數的最大公約數與最小公倍數

5. 有一對雌雄兔

,每兩個月就繁殖雌雄各一對兔子.問

n個月後共有多少對兔子?

6. 已知:數列

1,1,2,4,7,13,24,44,...

求數列的第n項

. 第6

題解答:

#include

int main() ;

scanf("%d",&n);

int tem=sum(n);

printf("%d/n",tem);

return 0; }

int sum(int n)

ø遞迴生成所有全排列實現1

:#include

#include

#include

bool used[100];

char a[100],n,c[100];

int main()

int f(int dep),

全排列為

perm(p)

,pn = p -

。因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)

。#include

int n = 0;

void swap(int *a, int *b)

int main()

;perm(list, 0, 4);

printf("total:%d/n", n);

return 0;

}void perm(int list, int k, int m)

else

} }

並不是嚴格字典序的哦,例如

12345

,12354

,12435

,12453

,「12543

,12534」…

深入淺出之揹包演算法 動態規劃是如何打敗遞迴的?

揹包問題 knapsackproblem 是一種組合優化的 np完全問題 問題可以描述為 給定一組物品,每種物品都有自己的重量和 在限定的總重量內,我們如何選擇,才能使得物品的總 最高。這個問題涉及到了兩個條件 一是物品總的大小小於或等於揹包的大小,二是物品總的價值要盡量大。一.採用遞迴的回溯法 剛...

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...