您好,登錄后才能下訂單哦!
如何理解ava遞歸算法的實(shí)例,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
遞歸三要素:
1、明確遞歸終止條件;
2、給出遞歸終止時(shí)的處理辦法;
3、提取重復(fù)的邏輯,縮小問題規(guī)模。
1、1+2+3+…+n
import java.util.Scanner; public class Recursion { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); System.out.println(sum(n)); } public static int sum(int n) { if(n == 1) { return n; } else { return n + sum(n-1); } }}
2、1 * 2 * 3 * … * n
import java.util.Scanner; public class Recursion { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); System.out.println(multiply(n)); } public static int multiply(int n) { if(n == 1) { return n; } else { return n*multiply(n-1); } }}
3、斐波那契數(shù)列
前兩項(xiàng)均為1,第三項(xiàng)開始,每一項(xiàng)都等于前兩項(xiàng)之和。即:1,1,2,3,5,8,…
import java.util.Scanner; public class Recursion { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); System.out.println(fun(n)); } public static int fun(int n) { if (n <= 2) { return 1; } else { return fun(n-1) + fun(n-2); } }}
4、二叉樹的遍歷(前、中、后)
import java.util.Arrays;import java.util.LinkedList; public class MyBinaryTree { //二叉樹節(jié)點(diǎn) private static class TreeNode{ int data; TreeNode leftChild; TreeNode rightChile; public TreeNode(int data) { this.data = data; } } //構(gòu)建二叉樹 public static TreeNode createBinaryTree(LinkedList<Integer> inputList) { TreeNode node = null; if(inputList == null || inputList.isEmpty()) { return null; } Integer data = inputList.removeFirst(); //如果元素為空,則不再遞歸 if(data != null){ node = new TreeNode(data); node.leftChild = createBinaryTree(inputList); node.rightChile = createBinaryTree(inputList); } return node; } //前序遍歷:根節(jié)點(diǎn),左子樹,右子樹 public static void preOrderTraveral(TreeNode node) { if (node == null) { return; } System.out.println(node.data); preOrderTraveral(node.leftChild); preOrderTraveral(node.rightChile); } //中序遍歷:左子樹,根節(jié)點(diǎn),右子樹 public static void inOrderTraveral(TreeNode node) { if(node == null) { return; } inOrderTraveral(node.leftChild); System.out.println(node); inOrderTraveral(node.rightChile); } //后序遍歷:左子樹,右子樹,根節(jié)點(diǎn) public static void postOrderTraveral(TreeNode node) { if (node == null) { return; } postOrderTraveral(node.leftChild); postOrderTraveral(node.rightChile); System.out.println(node.data); } public static void main(String[] args) { LinkedList<Integer> inputList = new LinkedList<Integer>(Arrays.asList(new Integer[]{3,2,9,null,null,10,null,null,8,null,4})); TreeNode treeNode = createBinaryTree(inputList); System.out.println("前序遍歷:"); preOrderTraveral(treeNode); System.out.println("中序遍歷:"); inOrderTraveral(treeNode); System.out.println("后序遍歷:"); postOrderTraveral(treeNode); }}
看完上述內(nèi)容,你們掌握如何理解ava遞歸算法的實(shí)例的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。