귀속(계단승, 피보나치 수열 실현, 한노타)

17697 단어
/* static 
   , 
   , 
class Base{

    public static int a = 10;// 
    public static final int A = 20;// 
    public int b = 30;// ==》 
    public final int C = 40;// 

    public static void fun() {
        int a = 10;// 
        final int b = 20;// 
    }
}

귀속

  • 귀속 과정은 함수가 자신을 호출하는 과정
  • 을 가리킨다
  • 함수 프로세스는 자신을 호출할 때마다 국부 변수의 추가 복사본을 저장하기 위해 더 많은 메모리 공간을 차지한다
  • 어떤 임계치에 가까워지면 이 귀환을 중지할 수 있는 조건이 있어야 한다
  • 창고가 넘치면 Stack OverflowError 오류의 장점 코드가 더욱 간결하고 뚜렷하며 코드량이 적고 단점이 적습니다.귀속은 함수 호출 자체이기 때문에 함수 호출은 시간과 공간의 소모가 있다. 매번 함수 호출은 매개 변수를 저장하고 주소와 임시 변수를 되돌려 주기 위해 메모리 창고에 공간을 분배해야 하고 창고에 데이터를 압축하고 팝업하는 데 시간이 필요하다. ->.효율성 2.귀속 중의 많은 계산은 중복된 것이다. 그 본질은 한 문제를 두 개 또는 여러 개의 작은 문제로 분해하는 것이기 때문에 여러 개의 작은 문제가 서로 중첩되는 부분이 존재하면 중복 계산이 존재한다. 예를 들어fibonacci 피보나치 수열의 귀속 실현이다. ->.효율호출 창고가 넘칠 수 있습니다. 사실 매번 함수 호출은 메모리 창고에 공간을 분배합니다. 프로세스마다 창고의 용량이 제한되어 있습니다. 호출 단계가 너무 많으면 창고의 용량을 초과하여 창고가 넘칠 수 있습니다. ->성능
  • 승계
    public static int fac(int n) {
            int num = 1;
            if(n == 1){
                num = 1;
            }else{
                num = fac(n-1)*n;
            }
            return num;
        }
    

    피보나치 수열
    public static int fibonaci(int n){
            int f = 1;
            if (n == 1 || n == 2){
                return 1;
            }else{
              return fibonaci(n-1)+fibonaci(n-2);
    
            }
        }
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int n = input.nextInt();
            for(int i = 1;i<=n;i++){
                System.out.print(fibonaci(i)+" ");
            }
        }
    

    이분 검색
     public static int binarySearch(int[] array,int key,int high,int low){
            low = 0;
            high = array.length-1;
            if (low>high) {
                return -1;
            }else {
                int mid = (low + high) / 2;
                if (key == array[mid]) {
                    return mid;
                } else if (key < array[mid]) {
                    return binarySearch(array, key, mid - 1, low);
                } else {
                    return binarySearch(array, key, high, mid + 1);
                }
            }
        }
    
        public static void main(String[] args) {
            System.out.println(" ");
            Scanner input = new Scanner(System.in);
            int n = input.nextInt();
            int[] array = {1,2,3,4,5,6};
            System.out.println(binarySearch(array,n,0,array.length-1));
        }
    

    한노타
        public static void move(char pos1,char pos2) {
            System.out.print(pos1+"==>"+pos2 + " ");
        }
    
        public static void hanio(int n,char pos1,char pos2,char pos3) {
            if(n == 1) {
                move(pos1,pos3);
            } else {
                hanio(n-1,pos1,pos3,pos2);
                move(pos1,pos3);
                hanio(n-1,pos2,pos1,pos3);
            }
        }
    
        public static void main(String[] args) {
            hanio(1,'A','B','C');
            System.out.println();
            hanio(2,'A','B','C');
            System.out.println();
            hanio(3,'A','B','C');
        }
    

    좋은 웹페이지 즐겨찾기