2009-11-12 70 views
2

嘿,我正在处理一个问题,您将使用递归垂直打印字符串。我知道如何做到这一点,如果我要使用循环:在Java中垂直使用递归打印字符串

for (int i = 0; i < str.length(); i++) { 

    System.out.println(str.charAt(i)); 

但我不完全知道如何使用递归。我照顾的基本情况,但我不知道如何继续:

if (str == null || str.equals("")) { 

    return str; 

任何帮助将不胜感激。谢谢!!!

回答

0

理解递归的关键是理解递归。 (bah dum bum)

但是,严肃地说,你应该从已经存在的问题中考虑一个小问题。在这个例子中,你有一段长度的字符串;你怎么能打印该字符串的一部分,然后有一个更小的字符串重复该过程?这是递归的基本思想。

你的基本情况是正确的,这样一种方式,你可以使用Java库和上面的代码去了解它:

public String printVertical(String str) 
{ 
    if (str == null || str.equals("")) 
    { 
     return str; 
    } 
    else 
    { 
     System.out.println(str.charAt(0)); 
     return printVertical(str.substring(1, str.length); 
    } 
} 
+1

你为什么回来?顺便说一下,你的方法原型是无效的 – 2009-11-12 04:34:21

+0

你是绝对正确的,我忙着考虑树木为我自己的任务,显然有点模糊。更正! – Feanor 2009-11-12 04:37:52

0

你为什么要这样做?这显然是迭代过程比递归实现更容易实现的情况。

有几种方法可递归处理。由于您正在使用Java,因此我建议您查看Java核心库中的String.substring方法。

1

如果有疑问,可以随时转换迭代直接到递归:

for (int i = 0; i < str.length(); i++) 
    System.out.println(str.charAt(i)); 

...变为:

public void printVertical(String str, int i) { 
    if (i < str.length()) { 
     System.out.println(str.charAt(i)); 
     printVertical(str, i + 1); 
    } 
} 

String inputStr = ... 
printVertical(inputStr, 0); 

注意,有一些更多的这样做的许多方面优雅。这感觉就像是给我做家庭作业。我建议你找一个主观上更好的方法,而不是使用我的循环的“盲目翻译”。

+0

比使用子 – 2009-11-12 04:47:45

+0

我不同意更好。更好的解决方案是使用'substring',因为它使用了更多的“分而治之”的方法。我的“解决方案”只是一个伪装的循环。 – 2009-11-12 04:51:25

0

这应该做的伎俩:

​​

递归的一点是,你必须调用自身的功能。

1
public void printVertString(String str) { 
    if (str != null && str.length > 0) //1 base condition 
    { 
     System.out.println(str.charAt(0)) //2 print first char 
     printVertString(str.substring(1)) //3 recursive call, but first char is omitted 
    } 
} 

这里做的事情:

  1. 检查字符串不是空的(基本情况)。如果是的话,不应该有任何更多的递归和方法只返回而不做任何事情
  2. 打印字符串的第一个字符
  3. 自称,但只有第二个字符起

所以,如果你发送一个海峡=“CAT”,以下是发生了什么(缩进区分同一功能的不同调用)

1 str is "CAT" --> not empty 
2 print "C" 
3 call printVertString "AT" 
    1 str is "AT" --> not empty 
    2 print "A" 
    3 call printVertString "T" 
     1 str is "T" --> not empty 
     2 print "T" 
     3 call printVertString "" 
      1 str is "" --> EMPTY 
      return