2017-08-17 100 views
0

我正在练习递归(至少这是我想我试图做的)。我的期望是代码打印出“dlrow olleh”11次,但它只会打印一次。原因?递归不起作用

import java.lang.StringBuilder; 

public class Practice { 

    public static void main(String[] args){ 
     String str = "hello world"; 
     int count = new StringBuilder(str).length(); 
     System.out.print(backwards(str, count)); 
    } 

    public static String backwards(String word, int letters){ 

     while(letters>0){ 
      return new StringBuilder(word).reverse().toString(); 
     } 

     return backwards(word,letters-1); 
    } 
} 
+3

你似乎有交换了基本案例和递归案例。另外,递归中不需要while循环,这就是递归的用处 – UnknowableIneffable

+1

但是除了交换案例之外,在这里使用递归没有意义:所有递归调用都是递减一个变量,然后执行当这个值达到零时。相反,只要立即做那件事。如果你想练习递归,确保你正在做一些需要递归的东西:) –

回答

0

您的基本情况似乎是首先触发,而不是最后触发。正如你将看到的,如果我向后调用(“Hello world”,11),那么因为字母> 0,它将返回新的StringBuilder(word).reverse.toString()

我想你的意思是转换两者。

0

所以基本上你没有修改字母变量,所以一段时间不会结束。

但是,返回是打断句子的陈述。

的recoursive的办法是这样的

public static void main(String[ ] args) { 
    String str = "hello world"; 
    int count = new StringBuilder(str).length(); 
    System.out.print(backwards(str, count - 1, new StringBuilder())); 
} 

public static String backwards(String word, int letters, StringBuilder sb){ 
    if (letters >= 0) { 
     sb.append(word.charAt(letters)); 
     return backwards(word, letters - 1, sb); 
    } else { 
     return sb.toString(); 
    } 

} 

通知我使用计数 - 1和字母> = 0,因为该指数从0到大小 - 1