遞歸(英語:Recursion),又譯爲遞迴,在數學與計算機科學中,是指在函數的定義中使用函數自身的方法。遞歸一詞還較經常使用於描述以自類似方法重複事物的過程。例如,當兩面鏡子相互之間近似平行時,鏡中嵌套的圖像是以無限遞歸的形式出現的。也能夠理解爲自我複製的過程。java
費波那契數列(意大利語:Successione di Fibonacci),又譯爲費波拿契數、斐波那契數列、費氏數列、黃金分割數列。
在數學上,費波那契數列是以遞歸的方法來定義:算法
f0 = 0 f1 = 1 fn = f(n-1) + f(n-2)
用文字來講,就是費波那契數列由0和1開始,以後的費波那契係數就是由以前的兩數相加而得出。首幾個費波那契係數是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……(OEIS中的數列A000045)
數據庫
public class FibonacciDemo { public static void main(String[] args) { System.out.println(fibonacci(0, 1, 44)); } public static int fibonacci(int cur, int next, int n) { if (n == 0) { return cur; } else { System.out.println(next); return fibonacci(next, cur + next, n - 1); } } }
若是一個問題的求解須要至關多的資源(不管用什麼算法),則被認爲是難解的。計算複雜性理論經過引入數學計算模型來研究這些問題以及定量計算解決問題所需的資源(時間和空間),從而將資源的肯定方法正式化了。其餘複雜性測度一樣被運用,好比通訊量(應用於通訊複雜性),電路中門的數量(應用於電路複雜性)以及中央處理器的數量(應用於並行計算)。計算複雜性理論的一個做用就是肯定一個能或不能被計算機求解的問題的所具備的實際限制。json
import com.alibaba.fastjson.JSON; public class BubbleSort { public static void main(String[] args) { int[] aa = new int[] { 2, 4, 3, 2, 5, 6 }; for (int i = 0; i < aa.length; i++) { for (int j = i; j < aa.length; j++) { if (aa[i] < aa[j]) { int temp = aa[i]; aa[i] = aa[j]; aa[j] = temp; } } } System.out.println(JSON.toJSONString(aa)); } }
public class BisectionSearch { public static void main(String[] args) { int[] aa = new int[] { 6, 5, 4, 3, 2, 2 }; int target = 5; int start = 0; int end = aa.length - 1; int mid = (start + end) / 2; while (aa[mid] != target && end > start) { if (aa[mid] > target) { start = mid + 1; } else { end = mid - 1; } mid = (start + end) / 2; } if (aa[mid] == target) { System.out.println("找到target"); } } }