JavaSE——方法、递归

简介: JavaSE——方法、递归

文章目录

1. 方法

  1. 递归

1. 方法
1.1方法的概念

1.2 方法定义
格式:

实现一个求闰年的方法:

public class Method{

//方法定义
public static boolean isLeapYear(int year){
    if((0==year%4&&0!=year%100)||0==year%400) {
        return true;
    }else{
        return false;
    }
}

}

1.3 方法调用的执行过程

定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行

一个方法可以被多次调用

1.4 方法的重载

  1. 递归

2.1 什么是递归
递归,就是在运行的过程中调用自己

构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理

终止条件必须是在递归最开始的地方,不能把终止条件写在递归结束的位置,这样的话,递归永远退不出来了,就会出现堆栈溢出异常(StackOverflowError)

public void recursion(参数0) {

if (终止条件) {
    return;
}
recursion(参数1);

}
2.2 递归实例
递归求 N 的阶乘
递推公式:N的阶乘用F(n)表示,那么F(n) = n * F(n-1);

import java.util.Scanner;

public class Test {

public static void main(String[] args) {
    int n=0;
    Scanner scanner=new Scanner(System.in);
    n= scanner.nextInt();
    System.out.println(fac(n));
}
public static int fac(int n){
    if(n==1){
        return 1;
    }
    else{
        return n*fac(n-1);
    }
}

}

递归求和
F(n) 代表1到n的和,那么F(n) = n + F(n-1)的和

F(n-1)是1到n-1的和

public class Test {

public static void main(String[] args) {
    int a=10;
    System.out.println(sum(a));
}
public static int sum(int a){
    if(a<1)
        return 0;
    return (a+sum(a-1));

}

}

递归打印数字的每一位
假设用F(n) 代表 要顺序打印n的每一位,如果n是一个1位数,直接输出,如果n是2位数以上。

如:

123 相当于先打印12的每一位,再打印3

12 相当于先打印1的每一位,再打印2

1 只有一位数,直接打印

依次回退打印完,每一位即可

public class Test {

public static void main(String[] args) {
int n=123456;
everypos(n);
}
public static void everypos(int a){
    if(a<10){
        System.out.println(a);
    }
    else{
        everypos(a/10);
        System.out.println(a%10);
    }
}

}

返回的数字之和
要计算123456的每一位,主要在于如何得到每一位。在前面的习题中我们知道,除10 , 模10.可以做到

在执行n=123456的时候,先执行everypos(123456/10)也就是everypos(12345)这个函数,等最后回来之后,才会把n=123456时候的n%10算完

public class Test {

public static void main(String[] args) {
int n=123456;
    System.out.println(everypos(n));
}
public static int everypos(int a){
    if(a<10){
        //System.out.println(a);
        return a;
    }
    else{
       return  everypos(a/10)+a%10;
    }
}

}

递归求斐波那契数列的第 N 项
F(n) 代表第n项斐波那契数列的值,那么F(n) = F(n-1) + F(n-2)的和

public class Test {

public static void main(String[] args) {
    System.out.println(fib(3));
}
public static int fib(int n){
    if(n==1||n==2){
        return 1;
    }
    else{
        return fib(n-1)+fib(n-2);
    }
}

}

递归求解汉诺塔问题
public class Test {

public static void main(String[] args) {

    Hanio(4,'A','B','C');
}
public static void move(char pos1,char pos3){
    System.out.println(pos1 +"->"+pos3+" ");
}
public static void  Hanio(int n,char pos1,char pos2,char pos3){
    if(n==1){
        move(pos1, pos3);
        return;
    }
    else{
        Hanio(n-1,pos1,pos3,pos2);
        move(pos1,pos3);
        Hanio(n-1,pos2,pos1,pos3);

    }
}

}

相关文章
|
自然语言处理 Java 编译器
【JAVASE】重载与递归
【JAVASE】重载与递归
【javaSE】 递归与汉诺塔详解
【javaSE】 递归与汉诺塔详解
|
算法 Java
|
Java
JavaSE --- 顺序、分支结构
JavaSE --- 顺序、分支结构
91 0
|
Java
【JavaSE】/*基于Java语言的递归运算*/
【JavaSE】/*基于Java语言的递归运算*/
94 0
【JavaSE】/*基于Java语言的递归运算*/
|
机器学习/深度学习 Java
【Java】File类、递归(二)
本期主要介绍File类、递归
118 0
【Java】File类、递归(二)
Java递归,尾递归
Java递归,尾递归
106 0
最大字段和(分治法,递归,Java)
求子区间及最大和,从结构上是非常适合分治法的,因为所有子区间[start, end]只可能有以下三种可能性: 在[0, (arr.length-1)/2]这个区域内 在[(arr.length-1)/2+1, arr.length-1]这个区域内 起点位于[0, (arr.length-1)/2],终点位于[(arr.length-1)/2+1, arr.length-1]内
JavaSE面试题——方法的递归与迭代
JavaSE面试题——方法的递归与迭代
JavaSE面试题——方法的递归与迭代
|
Java API
【Java】File类、递归(一)
本期主要介绍File类、递归
70 0