日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

遞歸和迭代的區(qū)別

 hero_2004 2012-05-16

遞歸和迭代的區(qū)別

分類: C/C++ 1595人閱讀 評論(3) 收藏 舉報

遞歸的基本概念:程序調(diào)用自身的編程技巧稱為遞歸,是函數(shù)自己調(diào)用自己.

一個函數(shù)在其定義中直接或間接調(diào)用自身的一種方法,它通常把一個大型的復(fù)雜的問題轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來解決,可以極大的減少代碼量.遞歸的能力在于用有限的語句來定義對象的無限集合.

使用遞歸要注意的有兩點:

1)遞歸就是在過程或函數(shù)里面調(diào)用自身;

2)在使用遞歸時,必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口.

 

遞歸分為兩個階段:

1)遞推:把復(fù)雜的問題的求解推到比原問題簡單一些的問題的求解;

2)回歸:當(dāng)獲得最簡單的情況后,逐步返回,依次得到復(fù)雜的解.

 

利用遞歸可以解決很多問題:如背包問題,漢諾塔問題,...等.

斐波那契數(shù)列為:0,1,1,2,3,5...

fib(0)=0;

fib(1)=1;

fib(n)=fib(n-1)+fib(n-2);

 

  1. int fib(int n)  
  2. {  
  3.    if(0 == n)  
  4.        return 0;  
  5.    if(1 == n)  
  6.        return 1;  
  7.    if(n > 1)  
  8.        return fib(n-1)+fib(n-2);  
  9. }  

上面就是一個簡單的遞歸調(diào)用了.由于遞歸引起一系列的函數(shù)調(diào)用,并且有可能會有一系列的重復(fù)計算,遞歸算法的執(zhí)行效率相對較低.

 

 

迭代:利用變量的原值推算出變量的一個新值.如果遞歸是自己調(diào)用自己的話,迭代就是A不停的調(diào)用B.

遞歸中一定有迭代,但是迭代中不一定有遞歸,大部分可以相互轉(zhuǎn)換.能用迭代的不用遞歸,遞歸調(diào)用函數(shù),浪費空間,并且遞歸太深容易造成堆棧的溢出.

 

  1. //這是遞歸   
  2. int funcA(int n)  
  3. {  
  4.     if(n > 1)  
  5.        return n+funcA(n-1);  
  6.     else   
  7.        return 1;  
  8. }  
  9. //這是迭代   
  10. int funcB(int n)  
  11. {  
  12.     int i,s=0;  
  13.     for(i=1;i<n;i++)  
  14.        s+=i;  
  15.     return s;  
  16. }  

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多