2012-03-14 11 views
1

私はこのコードを自分で作成しましたが、私は再帰で新しく、再帰的になるようにこのコードを変更するための助けが必要です。私はベースケースで始めました。私は2つの文字列をチェックし、その文字列が同じかどうかを調べるコードを記述しようとしていました。どのようにこのコードを再帰的に記述しますか?

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; 
} 
+0

実際には 'String#equals(..)'を使用します – Nishant

+0

このケースは再帰にはあまり適していませんが、反復のアプローチはほぼ確実です。バイナリツリーをナビゲートするなどの簡単なツリー検索の例を探す – Istinra

+0

equals()またはeqaulsIgnoreCase()を使用する。 –

答えて

2

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でこれを書きたいいけない

+0

オハイオ州は宿題なので、それを放棄した。 –

+0

それは誰かちょうどfreakinがそれを – user1268088

+1

とタグ付けしたものではありません。最も確かに*宿題です。私の完全な答えを解析することができないことがそれを証明します。 –

0

はアルゴがあることができますfollo:

あなたが境界条件を追加する必要があり、これに
compare(s1, s2, index) 
begin 
if(s1.charAt(index)==s2.charAt(index)) 
    return compare(s1,s2,index+1); 
else 
    return false; 
end 

今では、インデックスが長

+0

btw再帰はここでは最高の解決策ではありません – Baz1nga

+0

あなたの答えのコメントにスタイルがあります、私はそれが好きです。 ;-) – Jasonw

0

を超えた場合、これはチェックですproperly tail recursive:あなたが再帰呼び出しを使用している場合

class strcmp { 

private static boolean inner_check(String s1, String s2, int n) { 
    if (n == s1.length()) 
    return true; 
    if (s1.charAt(n) != s2.charAt(n)) 
    return false; 
    return inner_check(s1, s2, n + 1); 
} 

public static boolean check(String s1, String s2) { 
    if (s1.length() != s2.length()) 
    return false; 
    return inner_check(s1, s2, 0); 
} 

public static void main(String[] args) { 
    if (args.length < 2) { 
    System.out.println("provide two arguments"); 
    return; 
    } 
    System.out.println(check(args[0], args[1])); 
} 
} 
+0

2つの引数を指定するとどういう意味ですか? – user1268088

0

ねえ再帰を意味し、関数呼び出し自体が、あなたは再帰呼び出しが無限に行くべきではありませんことを気にする必要があり、我々は無限ループの実行を避けるために、いくつかのチェックポイントを配置する必要があることを意味。

あなたのコードでは、check(Strings、String s2)自体の中で決して "rec(String args1、String args2)"を呼び出すことはありません。

私はあなたの再帰呼び出しの簡単な例あなたは(ここではコメントでマーク)チェックコール自体に見ることができます

public boolean check(int s1, int s2) { 
    boolean b=s1>s2; 
    if(b) 
    { 
     return b; 
    } 
    else 
    { 
    return check(s1,s2-1); //here 
    } 

} 

を与えています。

0

ここには、再帰的コードを示す答えがあります。私はちょうどあなたが再帰的なコードを書くことを学んでいるので、あなたが最初にプロセスの仕組みとそれがどのように行われるべきか理解する必要があるので、追加したいと思います。 例:無限再帰を防ぐために、再帰呼び出しを行わないベースケースをまず作成する必要があります。 thisを読むと、より良い洞察を得ることができます。

関連する問題