所以我明白了如何使用一个递归方法,它有一些其他的返回类型,而不是作废。通常我会在同一个方法中再次调用相同的方法(在递归的情况下),同时在调用中递减或增加一些值以达到基本情况。然后在某个时候达到基本情况,问题就解决了,所以它开始返回每个调用的值。沿着这些路线。
但是
如果该方法的返回类型为void,那么您不能调用该方法,因为它不会/不能返回任何内容,该怎么办?我试着倒着写一个句子,我已经用for循环和rescrive方法解决了这个问题,这个方法可以返回一个字符串值,但我不确定如果它是空的,该如何处理它,而这正是作业所要求的
Edit:我还应该提到,这个句子只能在参数中传递
感谢大家提供的信息和帮助!
就像在C中可以传递指针一样,在Java中,可以简单地将类对象传递给函数,以保存函数递归调用生成的值。下面是一个简单的例子,反映了你计算斐波那契数的问题。
public class ComputeFibonacci {
static class Fibonacci {
public int ith;
public int value;
Fibonacci(int a, int b) {
ith = a;
value = b;
}
}
private static void fibonacci(Fibonacci result) {
if (result.ith == 1 || result.ith == 2) {
result.value = 1;
} else {
Fibonacci left = new Fibonacci(result.ith - 1, 0);
Fibonacci right = new Fibonacci(result.ith - 2, 0);
fibonacci(left);
fibonacci(right);
result.value = left.value + right.value;
}
}
public static void main(String[] args) {
// Here we compute the 10th fibonacci number
Fibonacci f = new Fibonacci(10, 0);
fibonacci(f);
System.out.println("The result is " + f.value);
}
}
祝你好运。
您可以使用任何可变对象作为递归函数的参数来存储结果。例如,您提到的倒句问题可以写成:
public void stringReverse(String s, int index, StringBuilder sb) {
if (index < 0)
return;
sb.append(s.charAt(index));
stringReverse(s, index - 1, sb);
}
就这样叫
StringBuilder sb = new StringBuilder();
stringReverse(mySentence, mySentence.length() - 1, sb);
递归不仅仅适用于返回值的方法/函数。递归只意味着方法/函数调用自己。
您必须保证至少有一站式服务条件,但这并不要求函数返回值。这通常是通过递归地改变函数每次调用自己时传递的一个或多个参数来实现的。当该/这些参数满足某个条件时,您的函数不再调用自己,所有挂起的操作都将得到解决。
我并不完全了解您试图执行的任务,但这里有一个递归函数的示例,它可以向后写入字符串。我使用的伪函数的名称希望是自解释的。
public void writeBackwards(String str) {
// This is the negation of the stop condition, so the stop condition
// is when the string is empty, in which case this function will do
// nothing:
if (!str.isEmpty()) {
char firstCharacter = str.getFirstCharacter();
str = str.removeFirstCharacter();
writeBackwards(str); // the recursive call
// The following operation will be pending, waiting for the
// recursive call to be resolved first:
writeCharacter(firstCharacter);
}
}
为了概括这个问题,我借用了Zelenski CS课堂讲义中的材料。而且,这与我的具体问题有关,因为几年前我从另一位讲师那里学习了C语言的这种方法。讲义在这里。我对C的理解很低,因为我偶尔使用它。基本上,我需要编写一个程序的几次,我回到课堂材料,找到类似的东西,然后从那里开始。 在本例(第4页)中,Julie正在字符串函数中使用递归算法查找单词。为了减少递归调用的数量,她添加了一个决策点。 为了增加
我试图在Java中创建一个方法,它打印fib序列,直到传递给该方法的数字。我的问题是,我需要使用int返回类型来返回序列,而我不能使用递归。
我想创建一个任务来运行串行命令。此时,我不需要从正在进行工作的方法返回任何内容。这可能会在以后发生变化,但我现在很好奇这是如何发生的。 这就是我所拥有的。我想为任务使用单独的方法,而不是创建匿名操作。我尝试返回void,结果是“void不能显式转换为任务”。我也试过了<代码>任务 在此过程中,我使用了一个线程来完成这项任务,但这次我想使用任务。 预计到达时间: 最后,这是我的完整解决方案
问题内容: 考虑以下示例(OOP书籍中的典型示例): 我有一Animal堂课,每个人Animal可以有很多朋友。 和子类喜欢Dog,Duck,Mouse等里面加如特定行为bark(),quack()等等。 这是Animal课程: 这是一些带有大量类型转换的代码片段: 有什么办法可以将泛型用于返回类型来摆脱类型转换,所以我可以说 这是一些带有返回类型的初始代码,这些代码作为从未使用过的参数传递给该方
为了方便起见,我将setter方法返回类型更改为对象,例如: 但在tomcat做出这一改变之后 PropertyNotFoundException: 为了消除这个异常,我将修饰符从private更改为public,但仍然得到相同的错误。所以我有两个问题; null
现在我希望以泛型的方式使用这些类。 如何从方法“method1”和“method2”返回泛型类型(可以是猫或狗)。我有几个返回“T extends Animal”的方法,所以最好在方法级别或类级别中声明泛型类型。