一、递归的概念

1.1 什么是方法递归:所谓方法的递归是一个方法执行的内部,自己调用了自己的过程。

java写一个递归函数实现线性查找 java递归法_java

1.2 什么场景下可以使用方法递归?

a:大问题可以拆分为若干个子问题解 

b:拆分后的子问题和原问题除了数据规模不同,解决思路完全相同。

c:必须存在递归的终止条件。(不会无限拆分,总会走到根的)

1.3 如何写出递归代码?

******对于新手来说刚开始写递归函数时,千万不要纠结函数内部的实现,要注意函数要做的事,假设已经写好直接调用即可。

import java.util.Scanner;
public class HomeWork7 {public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        System.out.println(N+"的阶乘为:"+sum(N));
    }
    public static int sum(int i){
      //终止条件  
          if(i<2){
            return 1;
        }
      //我们只知道输入i的值,所以返回i,剩下的交给sum(i-1)即可
        return i*=sum(i-1);
    }
}

 二、递归执行过程分析

例题:递归求N的阶乘

public static void main(String[] args) {
    int n = 5;
    int ret = factor(n);
    System.out.println("ret = " + ret);
}
public static int factor(int n) {
    System.out.println("函数开始, n = " + n);
    if (n == 1) {
        System.out.println("函数结束, n = 1 ret = 1");
        return 1;
   }
    int ret = n * factor(n - 1);
    System.out.println("函数结束, n = " + n + " ret = " + ret);
    return ret; }
// 执行结果
函数开始, n = 5
函数开始, n = 4
函数开始, n = 3
函数开始, n = 2
函数开始, n = 1
函数结束, n = 1 ret = 1
函数结束, n = 2 ret = 2
函数结束, n = 3 ret = 6
函数结束, n = 4 ret = 24
函数结束, n = 5 ret = 120
ret = 120

 执行过程图如下:

java写一个递归函数实现线性查找 java递归法_java_02

 三、递归题目的练习

1   按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

import java.util.Scanner;
public class HomeWork5 {public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        num(n);
    }
    public static void num(int n){
        if (n>9){
            num(n/10);
        }
        System.out.print(n%10+"  ");
    }
}

 

java写一个递归函数实现线性查找 java递归法_递归_03

2  写一个递归方法,输入一个非负整数,返回组成它的数字之和

import java.util.Scanner;
public class HomeWork4 {public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        System.out.println("各个位数之和为:"+num(a));
    }
    public static int num(int n){
        if(n<10){
            return n;
        }
        return num(n%10)+num(n/10);
    }
}

 

 

java写一个递归函数实现线性查找 java递归法_java_04

3  递归求斐波那契数列的第 N 项

 

import java.util.Scanner;
public class HomeWork3 {public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        System.out.println("项斐波那契数列第"+N+"项为:"+num(N));
    }
    public static int num(int n){
        if(n<3){
            return 1;
        }
        return num(n-1)+num(n-2);
    }
}

 

java写一个递归函数实现线性查找 java递归法_递归_05

青蛙跳台阶问题:一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法?

import java.util.Scanner;
public class HomeWork {public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int a = num(n);
        System.out.println("跳上"+n+"级台阶的方法种数为:"+a+"种");
    }
    public static int num(int a){
        if(a < 3){
            return a;
        }
        return a = num (a-1)+num (a-2);
    }
}

 

java写一个递归函数实现线性查找 java递归法_System_06