小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 hero_2004 2012-05-16

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

分類: C/C++ 1595人閱讀 評(píng)論(3) 收藏 舉報(bào)

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

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

使用遞歸要注意的有兩點(diǎn):

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

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

 

遞歸分為兩個(gè)階段:

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. }  

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

 

 

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

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

 

  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. }  

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多