迭代和遞歸

1. 迭代和遞歸

  1. 遞歸:是自頂向下逐步拓展需求,最後自下向頂運算。即由f(n)拓展到f(1),再由f(1)逐步算回f(n)
  2. 迭代:是直接自下向頂運算,由f(1)算到f(n)。

2. 迭代和遞歸

遞歸是在函數內調用自己,迭代是循環求值,不推薦使用遞歸算法算法

  1. 迭代,效率比遞歸高,代碼寫起啦不容易(累加就和)
  2. 遞歸,效率比較低,佔內存,代碼容易(階乘求職)

3. 迭代和遞歸

遞歸循環中,遇到知足終止條件的狀況時逐層返回來結束。迭代則使用計數器結束循環編程

迭代經典例子就是實數的累加,好比計算1-100全部實數的和。

int v=1;
for(i=2;i<=100;i++)
{
    v=v+i;//記數器
}

#4. 迭代和遞歸函數

遞歸的基本概念:程序調用自身的編程技巧稱爲遞歸,是函數本身調用本身.code

一個函數在其定義中直接或間接調用自身的一種方法,它一般把一個大型的複雜的問題轉化爲一個與原問題類似的規模較小的問題來解決,能夠極大的減小代碼量.遞歸的能力在於用有限的語句來定義對象的無限集合.對象

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

1)遞歸就是在過程或函數裏面調用自身;內存

2)在使用遞歸時,必須有一個明確的遞歸結束條件,稱爲遞歸出口.求職

遞歸分爲兩個階段:效率

1)遞推:把複雜的問題的求解推到比原問題簡單一些的問題的求解;變量

2)迴歸:當得到最簡單的狀況後,逐步返回,依次獲得複雜的解.

迭代:利用變量的原值推算出變量的一個新值.若是遞歸是本身調用本身的話,迭代就是A不停的調用B.

遞歸中必定有迭代,可是迭代中不必定有遞歸,大部分能夠相互轉換.能用迭代的不用遞歸,遞歸調用函數,浪費空間,而且遞歸太深容易形成堆棧的溢出.

//這是遞歸
int funcA(int n)
{
    if(n > 1)
       return n+funcA(n-1);
    else 
       return 1;
}
//這是迭代
int funcB(int n)
{
    int i,s=0;
    for(i=1;i<n;i++)
       s+=i;
    return s;
}
相關文章
相關標籤/搜索