用斐波那契數列來說明遞迴和迭代的區別
阿新 • • 發佈:2019-01-11
遞迴:自己呼叫自己
迭代:反覆替換的意思
遞迴與迭代都是基於控制結構:迭代用重複結構,而遞迴用選擇結構。
遞迴與迭代都涉及重複:迭代顯式使用重複結構,而遞迴通過重複函式呼叫實現重複。
遞迴與迭代都涉及終止測試:迭代在迴圈條件失敗時終止,遞迴在遇到基本情況時終止。
使用計數器控制重複的迭代和遞迴都逐漸到達終止點:迭代一直修改計數器,直到計數器值使迴圈條件失敗;遞迴不斷產生最初問題的簡化副本,直到達到基本情況。迭代和遞迴過程都可以無限進行:如果迴圈條件測試永遠不變成false,則迭代發生無限迴圈;如果遞迴永遠無法回推到基本情況,則發生無窮遞迴。
遞迴函式是通過呼叫函式自身來完成任務,而且在每次呼叫自身時減少任務量。而迭代是迴圈的一種形式,這種迴圈不是由使用者輸入而控制,每次迭代步驟都必須將剩餘的任務減少;也就是說,迴圈的每一步都必須執行一個有限的過程,並留下較少的步驟。
程式設計:
public class Fibonacci1 { /**遞迴求解 * @param args * a0=1 * a1=1 * an=a(n-1)+a(n-2) */ //遞迴求解 public static long Fuc(int n){ if (n==0|n==1) { return 1; } else { return Fuc(n-1)+Fuc(n-2); } } //迭代求解 public static long Fuc2(int n){ int head=1;int tail=1;int result=0; if (n>1) { for (int i = 2; i <= n; i++) { result=head+tail; head=tail; tail=result; } } else { result=1; } return result; } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(Fuc(5)); System.out.println(Fuc2(5)); } }