2013-02-05 23 views
-2

我有一个任务,要求我创建一个Java程序,它使用递归反转输入短语并将其输出。例如,给定一个输入“数据结构和算法”,程序将输出“算法和结构数据”。使用递归来反转一个短语

其中一个限制是,除了单个本地String变量外,程序中不能使用任何存储或Java集合。

我无法理解如何从多行读取输入数据并在字符串上实现递归方法。我理解递归的一般概念,但是将它实现到Java中是一件更加困难的任务。

+5

回复:“我理解递归的一般概念,但是实现它到Java是一个更困难的任务”:这是否意味着你已经提出了一个适当的递归al gorithm,只需要帮助Java-itizing它?如果是这样,请发布您的伪代码! :-) – ruakh

+0

http://www.geeksforgeeks.org/reverse-a-string-using-recursion/ - 这应该给你一个想法(在c) –

回答

2

正如问到的,这个解决方案能够逐个字符串地“翻转”字符串,其中单词只是由一个空格字符分隔。

public class TestClass { 

    public static String wordReverse(String s) { 
     int idx = s.indexOf(" "); 
     if (idx < 0) { 
      // no space char found, thus, s is just a single word, so return just s itself 
      return s; 
     } else { 
      // return at first the recursively reversed rest, followed by a space char and the first extracted word 
      return wordReverse(s.substring(idx + 1)) + " " + s.substring(0, idx); 
     } 
    } 

    public static void main(String[] args) { 
     System.out.println(wordReverse("DATA STRUCTURES AND ALGORITHMS")); 
    } 
} 

我无法理解我怎么会从多条线路

我不完全了解这一点读取输入数据,但如果你问如何读取用户输入从stdin然后看看System.in

+2

虽然我确信你有良好的意图,提供直出回答作业问题并不能帮助提问者学习任何东西。 – cjc343

+0

将OP逐步引导至他/她自己的解决方案是我在论坛中所做的事情,但不是在问答网站上,所有人都只需“一次性”。但事实上,OP在发布前似乎没有非常努力,但也许他也可以从阅读和理解中学到一些东西。无论如何,我只是喜欢这个例子,因为在现实生活中,我几乎从不使用递归:) –

+0

我认识到,SO不会让事情轻而易举,而大多数问题都从一个明确的解决方案中受益,对于家庭作业中明显产生的问题,伪代码或其他语言的答案可以帮助学生理解逻辑,而不允许盲目复制粘贴。我不想阻止你回答问题......我希望你继续这样做,但我也希望哈维尔通过他的课,因为他理解这些材料。 – cjc343