💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Java 递归指南 > 原文: [https://howtodoinjava.com/java/basics/java-recursion/](https://howtodoinjava.com/java/basics/java-recursion/) **递归**是一种编程样式,其中**方法重复调用其自身**,直到满足某个预定条件为止。 这种方法调用也称为**递归方法**。 ## 1\. 递归方法的语法 基于递归的方法必须具有两个基本组成部分才能正确解决问题。 1. 递归方法调用 2. 打破递归的前提 请记住,如果无法达到或未定义前提条件,则会发生栈溢出问题。 ```java method(T parameters...) { if(precondition == true) //precondition { return result; } return method(T parameters...); //recursive call } ``` ## 2\. 递归类型 根据何时进行递归方法调用,递归有两种类型。 #### 1\. 尾递归 当递归方法调用是该方法内部执行的最后一条语句时(通常与`return`语句一起使用),则递归方法为**尾递归**。 ```java method(T parameters...) { if(precondition == true) { return result; } return method(T parameters...); } ``` #### 2\. 头递归 不是尾递归的任何递归都可以称为头递归。 ```java method(T parameters...) { if(some condition) { return method(T parameters...); } return result; } ``` ## 3\. Java 递归示例 #### 3.1 斐波那契序列 斐波那契数列是一个数字序列,其中每个数字都定义为两个数字之和。 例如 -1、1、2、3、5、8、13、21、34,依此类推… 此函数为我们提供从 1 开始的第 n 个位置的斐波那契数。 ```java public int fibonacci(int n) { if (n <= 1) { return n; } return fibonacci(n-1) + fibonacci(n-2); } ``` 让我们测试一下此函数以打印`n = 10`的斐波那契数列; ```java public static void main(String[] args) { int number = 10; for (int i = 1; i <= number; i++) { System.out.print(fibonacci(i) + " "); } } ``` 程序输出。 ```java 1 1 2 3 5 8 13 21 34 55 ``` #### 3.2 最大公约数 两个正整数的*最大公约数*(gcd)是最大的整数,该整数平均分为两个整数。 ```java public static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); } ``` 让我们测试一下此函数以打印`n = 10`的斐波那契数列: ```java public static void main(String[] args) { int number1 = 40; int number2 = 500; System.out.print( gcd(number1, number2) ); } ``` 程序输出: ```java 20 ``` 让我知道您有关 Java 中**递归的问题**。 学习愉快!