2016-05-08 4 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)' ''. Я не понимаю смысл программы. –

ответ

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 имеет избыточное значение «r» слева от символа «y».

+0

большое спасибо !!! –

+0

@IdoSamselik - Добро пожаловать. Цените, если вы можете проголосовать за меня. – aviad

+0

Я новый участник, которого я до сих пор не могу .. –

0

Вы можете попробовать преобразовать пароль в ряд, а затем использовать 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; 
    } 
} 

Это не самый красивый код в мире, и Я не углублялся, чтобы понять, действительно ли это работает, просто дать вам представление о том, как его решить, не используя цикл, а просто простую рекурсию.

Смежные вопросы