2016-05-08 19 views
-1

指定された長さのパスワードを検出する再帰関数を記述する必要があります。許容される文字はa-zです。私はループを使用することはできませんが、私はそれを働かせることはできません。ループの再帰JAVA

ここで私の解決策は、私はいくつかの方法を取る必要がループです。

public static String findPassword(String p, int length) { 
    String pass = ""; 
    return findPassword(p, length, pass); 
} 

private static String findPassword(String p, int length, String pass) { 

    String abc = "abcdefghijklmnopqrstuvwxryz"; 

    if (pass.length() == length) { 
     if (p.equals(pass)) 
      return pass; 
     return ""; 
    } 

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

     if (p.equals(findPassword(p, length, pass + abc.charAt(i)))) 
      return findPassword(p, length, pass + abc.charAt(i)); 
    } 

    return ""; 
} 

私は考えることができ、何も働かないことを試みました。

+0

_ "指定された長さのパスワードを発見する..." _それはどういう意味ですか? '' p''パラメータとは何ですか? –

+0

私はあなたがしようとしていることはしていませんが、あなたはパスワードを見つけることを何と呼びますか? – TheBakker

+0

'' 'p'''は再現しようとしている文字列(等しい文字列が見つかったときに戻るため)のようです。しかし、あなたは '' 'p''または' '新しいString(p)' 'を返すことができます。私はプログラムのポイントを理解していません。 –

答えて

0
public static void main(String[] args) 
{ 
    System.out.println(findPassword("stack", 5)); 
} 

private static final String alphabet = "abcdefghijklmnopqrstuvwxyz"; 

public static String findPassword(String solution, int length) 
{ 
    return findPassword(solution, length, "", 0); 
} 

private static String findPassword(String solution, int length, String pass, int alphabetIndex) 
{ 
    if (pass.length() == length) 
    { 
     if (solution.equals(pass)) 
      return pass; 
     return ""; 
    } 

    if (alphabetIndex < alphabet.length()) 
    { 
     String found = findPassword(solution, length, pass + alphabet.charAt(alphabetIndex), 0); 

     if (found.length() == 0) 
     { 
      return findPassword(solution, length, pass, alphabetIndex + 1); 
     } 

     return found; 
    } 

    return ""; 
} 

**あなたのabc文字列には、 "y"という文字の余白が残っています。

+0

ありがとうございます! –

+0

@IdoSamselik - あなたは大歓迎です。あなたが私に投票することができればと感謝します。 – aviad

+0

私はまだ新しいメンバーです。私はまだできません.. –

0

あなたは数にパスワードを変換しようとしてから変換されたパスワードの値までのpの値を大きくするrecursioneを使用することができます。

public class Password { 
    public static void main(String[] args) { 
     System.out.println(findPassword(0, "this is the password to find")); 
    } 

    public static String findPassword(int p, final String passwordToFind) { 
     System.out.println(p); //just checkin it's working 
     if (p == passToInt(passwordToFind)) 
      return passwordToFind; 
     else 
      return findPassword(++p, passwordToFind); 
    } 

    private static int passToInt(String passwordToFind) { 

     int a = 0; 
     for (byte b : passwordToFind.getBytes()) { 
      a += b; 
     } 
     return a; 
    } 
} 

これは、世界で最も美しいコードではなく、実際に動作しているかどうかを調べるためには深くはありませんでした。ループを使用せずに解決する方法を説明するだけですが、単純な再帰があります。