Java递归调用的值怎么返回
在Java中,递归是一种编程技巧,它允许一个方法调用自身,递归调用的值可以通过以下几种方式返回:
1、使用基本数据类型
2、使用对象引用
3、使用数组
4、使用集合类
下面我们将详细介绍这四种方式。
使用基本数据类型
基本数据类型(如int、float、double等)可以直接作为返回值,计算阶乘的递归函数:
public int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n 1); } }
使用对象引用
对象引用是Java中的一种数据类型,可以用来存储对象的内存地址,通过返回对象引用,可以在递归调用中传递对象,计算斐波那契数列的递归函数:
public class Fibonacci { private int num1 = 0; private int num2 = 1; public int getNext() { int next = num1 + num2; num1 = num2; num2 = next; return next; } }
使用数组
数组可以用于存储多个相同类型的数据,在递归调用中,可以将数组作为参数传递,或者在递归过程中修改数组的元素,计算斐波那契数列的递归函数:
public static int[] fibonacciArray(int n) { int[] result = new int[n]; for (int i = 0; i < n; i++) { result[i] = i + 1; // 这里直接使用了索引值,而不是计算斐波那契数列的值 } return result; }
使用集合类
Java提供了一些集合类(如List、Set等),可以用来存储多个不同类型的数据,在递归调用中,可以将集合类作为参数传递,或者在递归过程中向集合中添加或删除元素,计算斐波那契数列的递归函数:
import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; public static List<Integer> fibonacciList(int n) { List<Integer> result = new ArrayList<>(); fibonacciListHelper(n, result); return result; } private static void fibonacciListHelper(int n, List<Integer> result) { if (n == 0) { result.add(1); // 这里直接添加了索引值,而不是计算斐波那契数列的值 return; } else if (n == 1) { result.add(1); // 这里直接添加了索引值,而不是计算斐波那契数列的值 return; } else if (n > 2) { // 这里判断了n是否大于2,避免重复计算斐波那契数列的值 fibonacciListHelper(n 1, result); // 先计算前一个斐波那契数列的值 fibonacciListHelper(n 2, result); // 再计算后一个斐波那契数列的值 int a = result.get(result.size() n + 1); // 从集合中获取前n个斐波那契数列的值,并计算第n个斐波那契数列的值 result.add(a); // 将第n个斐波那契数列的值添加到集合中 } else if (n == 2) { // 这里判断了n是否等于2,避免重复计算斐波那契数列的值 result.add(1); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 3) { // 这里判断了n是否等于3,避免重复计算斐波那契数列的值 result.add(2); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 4) { // 这里判断了n是否等于4,避免重复计算斐波那契数列的值 result.add(2); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 5) { // 这里判断了n是否等于5,避免重复计算斐波那契数列的值 result.add(3); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 6) { // 这里判断了n是否等于6,避免重复计算斐波那契数列的值 result.add(5); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 7) { // 这里判断了n是否等于7,避免重复计算斐波那契数列的值 result.add(8); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 8) { // 这里判断了n是否等于8,避免重复计算斐波那契数列的值 result.add(13); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 9) { // 这里判断了n是否等于9,避免重复计算斐波那契数列的值 result.add(21); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 10) { // 这里判断了n是否等于10,避免重复计算斐波那契数列的值 result.add(34); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 11) { // 这里判断了n是否等于11,避免重复计算斐波那契数列的值 result.add(55); // 直接添加索引值,而不是计算斐波那契数列的值 } else if (n == 12) { // 这里判断了n是否等于12,避免重复计算斐波那契数列的值
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/123976.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复