Java 您将如何递归地编写此代码?
我自己写了这段代码,但我对递归很陌生,我需要一些帮助来更改这段代码,使之成为递归代码。我从一个基本案例开始。我试着编写代码来检查两个字符串,看看它们是否相同Java 您将如何递归地编写此代码?,java,Java,我自己写了这段代码,但我对递归很陌生,我需要一些帮助来更改这段代码,使之成为递归代码。我从一个基本案例开始。我试着编写代码来检查两个字符串,看看它们是否相同 public static boolean check(String s1, String s2) { int count = 0; if (s1.length() != s2.length()) { return false; else { for (int i=0; i<
public static boolean check(String s1, String s2) {
int count = 0;
if (s1.length() != s2.length()) {
return false;
else {
for (int i=0; i< s1.length(); i++){
if(s1.charAt(i) != s2.charAt(i))
return false;
count = i;
}
if(count == s1.length()-1)
return true;
}
return false;
}
公共静态布尔检查(字符串s1、字符串s2){
整数计数=0;
如果(s1.length()!=s2.length()){
返回false;
否则{
对于(int i=0;i
不需要count
变量。您可以用递归调用替换for
循环:
public static boolean check(String s1, String s2) {
if (s1.length() != s2.length())
return false;
return check(s1, s2, 0);
}
private static boolean check(String s1, String s2, int i) {
// this is up to you
return check(s1, s2, i+1);
}
编辑:刚刚看到作业标签我不想用java写这篇文章这里是你可以遵循的算法:
compare(s1, s2, index)
begin
if(s1.charAt(index)==s2.charAt(index))
return compare(s1,s2,index+1);
else
return false;
end
为此,现在必须添加边界条件,即检查索引是否超过长度这是:
class strcmp{
私有静态布尔内部检查(字符串s1、字符串s2、整数n){
如果(n==s1.length())
返回true;
如果(s1.字符(n)!=s2.字符(n))
返回false;
返回内部检查(s1、s2、n+1);
}
公共静态布尔检查(字符串s1、字符串s2){
如果(s1.length()!=s2.length())
返回false;
返回内部检查(s1、s2、0);
}
公共静态void main(字符串[]args){
如果(参数长度<2){
System.out.println(“提供两个参数”);
返回;
}
System.out.println(检查(args[0],args[1]);
}
}
嘿,递归意味着函数调用本身,如果您使用递归调用,您应该注意递归调用永远不应该是无限的,这意味着我们需要设置一些检查点以避免无限循环执行
在代码中,您从不在check(Strings,strings2)本身内部调用“check(stringargs1,stringargs2)”,因此它不是递归的
我给你们举一个递归调用的简单例子
public boolean check(int s1, int s2) {
boolean b=s1>s2;
if(b)
{
return b;
}
else
{
return check(s1,s2-1); //here
}
}
您可以在check调用本身(在这里的注释中标记)中看到。您在这里有一些答案,这些答案向您展示了递归代码。我只是想补充一点,因为您只是在学习编写递归代码,您需要先了解该过程是如何工作的以及应该如何完成的。 示例:您应该首先编写不进行递归调用以防止无限递归的基本情况。
阅读,它会给你更好的洞察力。在现实生活中,你会使用
String#equals(…)
这种情况不太适合递归,迭代方法几乎总是更好,如果你在寻找递归示例,我建议你寻找简单的树搜索示例,例如导航二进制树equals()或者java.lang.Stringbtw递归的eqaulsIgnoreCase()方法并不是最好的解决方法,我喜欢你的答案的评论风格;-)这不是因为有人给它加了标签,因为它肯定是作业。你无法解析我的完整答案就证明了这一点。你说提供2个论点是什么意思
public boolean check(int s1, int s2) {
boolean b=s1>s2;
if(b)
{
return b;
}
else
{
return check(s1,s2-1); //here
}
}