Java 我正在尝试编写一个递归函数,检查一个单词是否与反向单词匹配,但我不确定它是否递归

Java 我正在尝试编写一个递归函数,检查一个单词是否与反向单词匹配,但我不确定它是否递归,java,recursion,Java,Recursion,我真正需要知道的是,我使用的函数是递归的,还是该方法本身没有被调用。 在我的代码中,我有一个helper函数来反转第二个单词,并且我放置了一个toLowerCase,以便能够比较单词,即使有任何随机的大写字母。 这是递归还是只是一个比较两者的函数 import java.util.Scanner; public class isReverse { public static void main(String[] args) { isReverse rev = new i

我真正需要知道的是,我使用的函数是递归的,还是该方法本身没有被调用。 在我的代码中,我有一个helper函数来反转第二个单词,并且我放置了一个toLowerCase,以便能够比较单词,即使有任何随机的大写字母。 这是递归还是只是一个比较两者的函数

import java.util.Scanner;

public class isReverse {
    public static void main(String[] args) {
        isReverse rev = new isReverse();
        Scanner in = new Scanner(System.in);
        System.out.println("Please enter a word: ");
        String a = in.nextLine();
        System.out.println("Please Enter a second word to compare: ");
        String b = in.nextLine();
        System.out.println(rev.isReverse(a, b));

    }
String rev = "";
    public boolean isReverse(String wordA, String wordB){
        String fword = wordA.replaceAll("\\s+", "").toLowerCase();
        String clean2 = wordB.replaceAll("\\s+", "").toLowerCase();
        String reverse = revString(clean2);
        if(fword.length() == 0){
            return false;
        }
        if (fword.equals(reverse)){
            return true;
        }
        if (!reverse.equals(fword)){
            return false;
        }

        else
        return  isReverse(fword,reverse);
    }

    public String revString(String sequence) {
        String input = sequence;
        StringBuilder order = new StringBuilder();
        order.append(input);
        order = order.reverse();
        rev = order.toString();
        return rev;
    }
}

就您的问题而言,您的代码的行为不像递归函数,因为您的代码没有进入最后一个else条件。要使递归工作,您需要:

基本情况如果没有基本情况,递归将永远持续下去 一个递归的例子,这是你减少原始问题的地方 但我对您的代码的评论是:

如果您正在执行实际的反向逻辑,则不需要使用递归来检查原始字符串和反向字符串是否相同。这纯粹是一个算法问题,因此以下是解决问题的方法:

如果给定输入的长度为1,则相反的长度相同。 其他: 检查字符串的第一个和最后一个字符,如果它们相等,则需要删除这两个字符,并检查字符串的其余部分是否为回文。这是实际的递归步骤。 否则字符串不是回文。
就您的问题而言,您的代码的行为不像递归函数,因为您的代码没有进入最后一个else条件。要使递归工作,您需要:

基本情况如果没有基本情况,递归将永远持续下去 一个递归的例子,这是你减少原始问题的地方 但我对您的代码的评论是:

如果您正在执行实际的反向逻辑,则不需要使用递归来检查原始字符串和反向字符串是否相同。这纯粹是一个算法问题,因此以下是解决问题的方法:

如果给定输入的长度为1,则相反的长度相同。 其他: 检查字符串的第一个和最后一个字符,如果它们相等,则需要删除这两个字符,并检查字符串的其余部分是否为回文。这是实际的递归步骤。 否则字符串不是回文。
实际上这不是一个递归过程。您所需要的只是:

检查两个字符串的长度是否相同 迭代检查第一个字符串中从0到n的字母以及第二个字符串中从n到0的字母。如果它们相等,则转到下一个迭代递归或返回fail otherqwise。
实际上这不是一个递归过程。您所需要的只是:

检查两个字符串的长度是否相同 迭代检查第一个字符串中从0到n的字母以及第二个字符串中从n到0的字母。如果它们相等,则转到下一个迭代递归或返回fail otherqwise。
技术上?好吧,你是从内部调用一个方法,所以,从技术上来说,是的

务实?否。将永远不会调用递归调用部分

你的代码是这样的:我有两个单词。如果两个词相等,停下来做点什么。如果他们不相等,停下来做点什么。否则,将递归

这就是它的分崩离析之处:它永远不会重现——要么单词是相等的,要么它们不是

递归函数的基本思想有三个方面:

“function”的javaese方法调用自身。 每次调用自身时,传递的参数都会进入结束状态-它们会变小或趋向于停止值,如0。 在一些边缘情况下,函数不调用自身,而是返回最小/零est输入的答案,这不需要递归,而且非常简单。 你错过了这里的第二部分。这大概就是递归方法所需要的。忘记revString,完全删除它。改为这样做:

如果两个输入都完全为空,则返回true,即3边案例部分。 如果两个输入中的一个为空,而另一个为空,则为false。仍在处理3 如果输入字符串的第一个字符不等于输出字符串的最后一个字符,则为false。仍然是3。 现在删除第一个输入的第一个字符和第二个输入的最后一个字符,现在处理2-通过缩短字符串,无论发生什么,我们都不可避免地朝着结束的方向前进 现在给自己打电话,用这些新剪掉的字符串,将是1。
这将是解决问题的递归方法。它比循环更复杂,但是递归函数通常是这样。

从技术上讲?好吧,你是从内部调用一个方法,所以,从技术上来说,是的

务实?否。将永远不会调用递归调用部分

你的代码是这样的:我有两个单词。如果两个词相等,停下来做点什么。如果他们不相等,停下来做点什么。否则,将递归

这就是它崩溃的地方 当前位置它永远不会重现-要么单词相等,要么不相等

递归函数的基本思想有三个方面:

“function”的javaese方法调用自身。 每次调用自身时,传递的参数都会进入结束状态-它们会变小或趋向于停止值,如0。 在一些边缘情况下,函数不调用自身,而是返回最小/零est输入的答案,这不需要递归,而且非常简单。 你错过了这里的第二部分。这大概就是递归方法所需要的。忘记revString,完全删除它。改为这样做:

如果两个输入都完全为空,则返回true,即3边案例部分。 如果两个输入中的一个为空,而另一个为空,则为false。仍在处理3 如果输入字符串的第一个字符不等于输出字符串的最后一个字符,则为false。仍然是3。 现在删除第一个输入的第一个字符和第二个输入的最后一个字符,现在处理2-通过缩短字符串,无论发生什么,我们都不可避免地朝着结束的方向前进 现在给自己打电话,用这些新剪掉的字符串,将是1。
这将是解决问题的递归方法。这比循环更复杂,但是递归函数通常都是这样。

只是在没有上下文的情况下,将代码发布到家庭作业问题上?请不要这样做。@rzwitserroot是的。那不是个好主意。用注释修复了它。只是在没有上下文的情况下将代码发布到家庭作业问题上?请不要这样做。@rzwitserroot是的。那不是个好主意。用注释修复了它。
// here do not check signature of the public method
public static boolean isReverse(String one, String two) {
    return isReverse(one, 0, two, two.length() - 1);
}

// support method has two additional counters to check letters to be equal
private static boolean isReverse(String one, int i, String two, int j) {
    if (i == one.length())
        return j == -1;
    if (j == two.length())
        return i == -1;
    // if not equal, then strings are not equal
    if (one.charAt(i) != two.charAt(j))
        return false;
    // go to the next recursion to check next letters
    return isReverse(one, i + 1, two, j - 1);
}