遞歸的概念很簡單,就是本身調用本身。spa
而迭代,則是經過修改初始化數據,獲得中間結果,而後不斷的對中間結果進行修改,而獲得最終結果。簡單來講迭代就是循環。code
在此,咱們用一個比較經典的Fibonacci數列來講明遞歸與迭代的區別。 先介紹一下Fibonacci數列:blog
無窮數列 1,1,2,3,5,8,13,......稱爲Fibonacci數列遞歸
除了第一個數和第二個數都等於 1 。後續的數都是前兩個數之和。
ci
遞歸版Fibonacci :class
public int fibonacci(int n) { if(n == 1 || n == 2) return 1; return fibonacci(n - 1) + fibonacci(n - 2); }
迭代版Fibonacci:循環
public int fibonacci(int n) { if(n == 1 || n == 2) return 1; int result = 0, pre1 = 1, pre2 = 1; for(int i = 3; i <= n; i ++) { result = pre1 + pre2; pre1 = pre2; pre2 = result; } return result; }