재귀의 세 가지 요소:
1. 재귀 종료 조건을 명확히 합니다.
2. 반복되는 논리를 추출하고 문제의 크기를 줄입니다.
1, 1+2+3+…+nimport 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);
}
}
}
(권장 학습:
java 비디오 튜토리얼)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);
}
}
}
처음 두 항목은 모두 1이고, 세 번째 항목부터 각 항목은 이전 두 항목의 합과 같습니다. 즉: 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 {
//二叉树节点
private static class TreeNode{
int data;
TreeNode leftChild;
TreeNode rightChile;
public TreeNode(int data) {
this.data = data;
}
}
//构建二叉树
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;
}
//前序遍历:根节点,左子树,右子树
public static void preOrderTraveral(TreeNode node) {
if (node == null) {
return;
}
System.out.println(node.data);
preOrderTraveral(node.leftChild);
preOrderTraveral(node.rightChile);
}
//中序遍历:左子树,根节点,右子树
public static void inOrderTraveral(TreeNode node) {
if(node == null) {
return;
}
inOrderTraveral(node.leftChild);
System.out.println(node);
inOrderTraveral(node.rightChile);
}
//后序遍历:左子树,右子树,根节点
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);
}
}
관련 기사 튜토리얼 공유:
위 내용은 자바 재귀 알고리즘 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!