我需要使用三种预先给定的方法printBackwards()
,first
和rest
编写length
方法。 printBackwards()
方法需要将String作为参数并在控制台上打印该字符串的每个字母,但每个字母都需要在新行上以相反的顺序打印。因此,如果String为House
,则输出应为:
电子
小号
ü
Ø
H
在本练习中,我们应该使用递归和if-else语句。没有数组,没有其他(熟悉的)String方法,没有while和for循环。
我做了一点,我知道这不正确,但那就是我设法做了多少。我不明白如何编写代码,因此该方法可以在字母e
之前返回字母。 如何在这里使用递归?
public class Recurse {
public static void main(String args[]){
System.out.println(printBackwards("House"));
}
//printBackward: takes a String as a parameter and prints letters of the String,
// one on each line, but backwards
public static String printBackwards(String s){
if (length(s) == 1){
return s;
} else {
return printBackwards(rest(s));
}
}
// first: returns the first character of the given String
public static char first(String s) {
return s.charAt(0);
}
// last: returns a new String that contains all but the
// first letter of the given String
public static String rest(String s) {
return s.substring(1, s.length());
}
// length: returns the length of the given String
public static int length(String s) {
return s.length();
}
}
答案 0 :(得分:3)
因为这是一个家庭作业问题,我会尽可能多地离开你,所以你学习。
考虑以下两个事实:
使用这两个事实足以构建一个递归方法。
第2点是终止条件。最好先编码。
第1点是主要的方法体,其中使用递归
一旦有了终止条件和递归结构(通常是预订或后订单操作),就可以构建一个递归方法。
还请注意打印 Backwards()方法的名称(不是向后())。也就是说,方法进行打印;它没有向后返回字符串。
因此,将上述内容转换为伪代码(在本例中实际上是 代码):
答案 1 :(得分:1)
首先,您需要在printBackwards
函数中打印输出,因此main将如下所示:
public static void main(String args[])
{
printBackwards("House");
}
其次,递归的工作方式。如果您希望以升序执行它,您应该在自我函数调用之前执行操作。否则,在执行顺序下降的情况下,您应该在自我调用函数之后执行代码。这些是递归函数的基本原理。
在这种情况下,让我们尝试建立答案 首先,我们需要处理停止条件,该条件应始终写在之前自调用函数。最好和最常见的停止条件是到达某事的结尾,在这种情况下,当我们得到一个空字符串时,在所有其他情况下,我们需要稍微改变一下调用自我函数,在这种情况下它将为函数提供其余的字符串:
if ( !length(s) )
{
//stop the recursion
return;
}
else
{
printBackwards(rest(s));
}
当你到达stop recursion语句时,从这一点开始,它将关闭所有打开的自我执行功能,因此将向后移动。
这是我们需要实现的完美状态,向后打印字母,因为在printBackwards
执行的每个状态,我们从左侧字母切了一点字符串,这意味着第一个字母是我们需要的。
例如,对于字符串House
,printBackwards
函数的最后一次调用将在s
变量保存e
值时,因为它是一个源自当我们达到停止状态时,被切断为空字符串。在这种情况下,我们希望将其打印出来,但在此之前的自我调用中,s
变量将保留值se
,因为它在剪切第一个字母之前是一步。所以,我们不想打印整个值,而只打印它的第一个字母,如下所示:
System.out.println(first(s));
将所有内容组合在一起将导致以下实施:
public static String printBackwards(String s)
{
if ( !length(s) )
{
//stop the recursion
return;
}
else
{
printBackwards(rest(s));
System.out.println(first(s));
}
}
希望,我清楚地解释了。
祝你好运!