【问题标题】:How to use recursion to reverse text? [closed]如何使用递归来反转文本? [关闭]
【发布时间】:2013-03-02 04:26:04
【问题描述】:
import java.util.*;
public class RecursionProject {
  public static void main(String[]args) {
    getLine(); 
    useRecursion();
  }
  public static void getLine() {

    System.out.println("This program uses recursion.") ;
    System.out.println("Would you like to see how it works?") ;
    System.out.print("If yes, type yes, else type no -----> ");
    String userResponse = null;
    Scanner in = new Scanner(System.in);
    userResponse = in.next();
    System.out.println(userResponse);
    if (userResponse.equalsIgnoreCase("yes")) {
      System.out.println() ;
    }
    else {
      System.out.println("Thank you for using this program.");
      System.exit(0);
    }

  }
  private static void useRecursion(){
    System.out.println("Type in what you would like to see") ; 
    System.out.println("done recursively. (This program ") ;
    System.out.println("excludes white spaces):") ;
    String s = null ; 
    Scanner console = new Scanner(System.in) ;
    s = console.next() ; 
    if (s.isEmpty()) {
      System.out.print(" - ") ;

    }
    else {
      System.out.println("0") ;
    }
  } 
}

到目前为止,这是我的代码。我的任务是从控制台读取输入,然后使用递归反转相位。即,如果用户键入“动物”,它将在屏幕上打印出“slamina”。 我知道我的基本情况是该行是否为空,而我的递归情况是该行是否包含文本。 这是一个 Programming 2 类,在 Eclipse 4.2.2 上使用 Java

【问题讨论】:

  • 是的...我们不能做你的作业...
  • 我正在寻找一些建议。我的方向正确吗?
  • 我在这里看不到任何实际的逻辑 - 你在哪里尝试编写递归代码?你能告诉我们你的尝试吗?
  • 老实说。我完全迷路了。我已经阅读了关于递归的教科书大约 3 次,但仍然不知道该往哪个方向发展。我能解释一下如何在字符串上使用递归吗?
  • 希望我的回答能对此有所启发。我认为您需要了解的关键是您正在通过重复使用子问题的结果来解决问题,直到最终子问题变得微不足道。例如,“Hello”的反义词就是“ello”的反义词,末尾有一个“H”。一旦你开始反转“o”,它就变得微不足道了。

标签: java recursion


【解决方案1】:

StringBuffer 有一个内置的reverse() 方法,所以就使用它吧。

以下是您如何反转 String,例如“Hello World”:

String source = "Hello World";

    for (String word : source.split(" ")) {
        System.out.print(new StringBuffer(word).reverse().toString());
        System.out.print(" ");
    }

输出:

olleH dlroW 

这是作业,所以我不会为你做。基本上,要使其递归,您需要创建一个接受String(或带有可变arity 参数的多个Strings)的方法,然后使用我的代码逻辑来反转StringStrings,并返回它们.然后,您可以在每次需要反转 String 时调用该方法。

【讨论】:

  • 赋值是使用递归。这是一个怎样的例子?
  • 到目前为止,我的想法是创建一个 if 和 else 条件。 if 是基本情况,否则将是我的递归情况。但是我不知道如何开始使用递归
  • 没错,这是一个任务,我不会为他做所有的工作。
  • 很公平,但如果他不了解递归是什么,发布非递归答案可能会增加他的困惑。
  • 我编辑了我的答案给他一个好的开始。
【解决方案2】:

很难提供既有用又不为你做功课的东西。我会尝试,但我不会给你工作代码。

从这样的开始:

public static final String reverse ( String s ) {
  if ( s != null && s.length() > 1 ) {
    return (lastChar(s) + allButLastChar(s));
  }
  return s;
}

编写lastCharallButLastChar,运行代码,看看它做了什么。下一步取决于您,但应该很明显。

【讨论】:

    【解决方案3】:

    通常使用递归,您将拥有一个调用自身的函数。你不需要递归来反转一个字符串,但我想你可以有一个函数接受一个字符串,并将字符串的第一个字符附加到其余字符的反面。

    我将尝试在不提供太多代码的情况下解释其工作原理。

    假设你有一个函数reverse 可以反转一个字符串。在里面你可以这样说:

    return reverse(myString.substring(1)) + myString[0];
    

    当您在字符串Hello 上调用它时,它的工作方式如下:

    reverse("Hello")
    -> reverse("ello") + "H"
    -> reverse("llo") + "e" + "H" 
    -> reverse("lo") + "l" + "e" + "H" 
    -> reverse("o") + "l" + "l" + "e" + "H" 
    -> "o" + "l" + "l" + "e" + "H"
    

    当字符串为空时,需要切断递归。

    【讨论】:

    • 如果我将我的 Scanner 包含在递归方法中,当它再次调用自身时,它会一直暂停输入吗?
    • 我会让递归方法将字符串作为参数。在调用之前获取输入。从您的评论中,我想您可以看出为什么在递归方法中获取输入是一个问题。
    • 但在您关注“我应该如何编写此代码”之前,请确保您了解如何使用递归的idea。字符串中越来越小的片段反复反转的位是关键。剩下的只是细节。
    • 也就是说,细节也很重要。 :)
    • 我修改了我的代码位,我的递归方法现在读取一个字符串作为参数。 public static String Recursive(String s){ if(s.length()==0) { System.out.print("") ; } else { char[] t = s.toCharArray(); s = 新字符串(t);递归的; } System.out.print(s.charAt(0)) ;返回 s ;希望你能理解,但我怎样才能更接近我的基本情况?这部分要了我的命
    猜你喜欢
    • 2019-08-09
    • 2013-04-13
    • 1970-01-01
    • 2022-01-23
    • 2023-03-27
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2019-08-13
    相关资源
    最近更新 更多