函数递归的调用

递归是一种不断的调用自身的函数

   它满足两个条件:1.有反复的执行过程(调用自身)。2.有跳出反复执行过程的条件(递归出口)。

递归的好处就是使得代码更少,更精炼,递归在很多的方面都有体现,例如简单的:求n项和,求阶乘。还有河内塔,全排列问题,斐波那契数列等。

例子:1.河内塔问题    

import java.util.Scanner;
public class Main {
 private static int  count = 0;
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  hanoi(n,'a','b','c');
  System.out.println(count);
  
 }
 private static void hanoi(int n, char a, char b, char c) {
  // TODO Auto-generated method stub
  if(n>=1){
   hanoi(n-1,a,c,b);
   count++;
   hanoi(n-1,b,a,c);
  }
 }
}
2.求阶乘
   
import java.util.Scanner;
public class Main {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  recursionMulity(n);
  System.out.println(recursionMulity(n));
  
 }
 private static Integer recursionMulity(Integer n) {
  if(n==1){
   return 1;
  }
  return n*recursionMulity(n-1);
  // TODO Auto-generated method stub
  
 }
}
3.求n项和
import java.util.Scanner;
public class Main {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  recursionSum(n);
  System.out.println(recursionSum(n));
 }
 private static Integer recursionSum(Integer n) {
  if(n>0){
   return n+recursionSum(n-1);
  }else{
  return 0;
  }
  // TODO Auto-generated method stub
  
 }
}
4.将数字从小到大排序
   
package sort;
import java.util.Scanner;
public class Main {
 //将一串数字从小到大进行排序
 public static void mergeSort(int a[], int b[], int start, int last) {
  int mid;
  if (start < last) {
   mid = (start + last) / 2;
   mergeSort(a, b, start, mid);
   mergeSort(a, b, mid + 1, last);
   merge(a, b, start, mid, last);
  }
 }
 private static void merge(int[] a, int[] b, int start, int mid, int last) {
  // TODO Auto-generated method stub
  int i = start, j = mid + 1, k = 0;
  while (i <= mid && j <= last) {
   if (a[i] < a[j]) {
    b[k++] = a[i++];
   }
   if (a[i] > a[j]) {
    b[k++] = a[j++];
   }
  }
  while (i <= mid) {
   b[k++] = a[i++];
  }
  while (j <= last) {
   b[k++] = a[j++];
  }
  for (int i1 = 0; i1 < k; i1++) {
   a[start + i1] = b[i1];
  }
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  @SuppressWarnings("resource")
  Scanner sc = new Scanner(System.in);
  int num = sc.nextInt();
  int[] a = new int[num];
  int[] b = new int[num];
  for (int i = 0; i < num; i++) {
   a[i] = sc.nextInt();
  }
  mergeSort(a, b, 0, num - 1);
  for (int i = 0; i < num; i++) {
   System.out.print(a[i] + " ");
  }
 }
}






猜你喜欢

转载自blog.csdn.net/mengdeng19950715/article/details/79054747