재귀 함수 내에서의 for문 실행

조회수 2213회

import java.util.ArrayList; import java.util.Scanner;

public class Anagram {

public static void ana(ArrayList<String> ar, ArrayList<String> sub)
{
    if(ar.size()>1)
    {
        for(int i = 0; i < ar.size(); i++)
        {
            System.out.println("실행");
            sub.add(ar.get(i));
            ar.remove(i);
            ana(ar, sub);
        }
    }
    else if(ar.size() == 1)
    {
        sub.add(ar.get(0));
        System.out.println(sub);
        return;
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ArrayList<String> ar = new ArrayList<String>();
    ArrayList<String> sub = new ArrayList<String>();
    Scanner a = new Scanner(System.in);
    Scanner b = new Scanner(System.in);
    System.out.println("입력할 문자의 개수를 입력해주세요 :");
    int count = a.nextInt();
    for(int i = 0; i < count; i++)
    {
        ar.add(b.nextLine());
    }

    ana(ar, sub);
}

}

Anagram을 재귀함수를 이용해서 만들려고 합니다. 그런데 이것을 실행시키면, 매소드 안 for문이 0일때는 실행이 되는데 딱 한 번만 되고 그 뒤로 반복이 되질 않습니다. 이것을 반복시키려면 어떻게 해야하는 것인지 모르곘습니다. 도움 부탁드립니다. ㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 재귀호출을 이용할 때는 보통 반복을 이용하지 않습니다. 내가 나를 호출하는 구조가 되기 때문에 위의 로직은 반복없이 재귀호출를 하면 궁극적으로 하나씩 요소가 삭제되고 sub에 저장됩니다. 정영훈 2018.4.5 19:53
  • 감사합니다 알 수 없는 사용자 2018.4.5 20:28

1 답변

  • import java.util.ArrayList; import java.util.Scanner;
    
    public class Anagram {
    
        public void Func(ArrayList<String> ar, ArrayList<String> sub, int size)
        {     
            if(size == 0)
            {
                System.out.println(sub);
                return;
            }
    
            System.out.println("실행");
    
            sub.add(ar.get(0));
            ar.remove(0);
    
            Func(ar, sub, size-1);
        }
    
        public static void main(String[] args) {
            Anagram ana = new Anagram();
            ArrayList<String> ar = new ArrayList<String>();
            ArrayList<String> sub = new ArrayList<String>();
            Scanner a = new Scanner(System.in);
            Scanner b = new Scanner(System.in);
    
            System.out.println("입력할 문자의 개수를 입력해주세요 :");
    
            int count = a.nextInt();
            for(int i = 0; i < count; i++)
            {
                ar.add(b.nextLine());
            }
    
            ana.Func(ar, sub, ar.size());
        }
    }
    

    뭘 원하시는지 잘 모르겠네요

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)