JAVA 16反復関数と再帰関数


  • 再帰関数は小さい場合に上がったものです...
  • 再帰関数を使用したファクトリ関数

    import java.util.Scanner;
    
    public class Main {
    
    	public static int factorial(int number) {
    		
    		if (number == 1)
    		{
    			return 1;
    		}
    		else
    		{
    			return number * factorial(number - 1);  // 5! = 5 * 4! 이용 **
    		}
    	}
    	
    	public static void main(String[] args) {
    		
    		Scanner input = new Scanner(System.in);
    		System.out.println("수를 입력하세요.");
    		int N = input.nextInt();
    		
    		System.out.println("위 수의 팩토리얼의 값 : " + factorial(N));
    		input.close();
    	}
    
    }
    

    フィボナッチ数列


    くりかえしかんすう

    import java.util.Scanner;
    
    public class Main {
    
    	// 반복함수를 사용한 피보나치 수열
    	public static int fibo(int k) {
    		int a1 = 1;
    		int a2 = 1;
    		int result = -1;   // 아예 첨부터 -1로 잡으면 좋다.
    		
    		if (k == 1 || k == 2)
    		{
    			return 1;
    		}
    		else 
    		{
    			for(int i = 2; i < k; i++)   // 자리가 한칸씩 이동**
    			{
    				result = a1 + a2;
    				a1 = a2;
    				a2 = result;
    			}
    		}
    		
    		return result;
    	}
    	public static void main(String[] args) {
    		
    		Scanner input = new Scanner(System.in);
    		System.out.println("몇 번째 피보나치 수열?");
    		int N = input.nextInt();
    		
    		if (N == -1)
    		{
    			System.out.println("값이 존재하지 않는다.");
    		}
    		else 
    		{
    			System.out.println("다음과 같다 : " + fibo(N));
    		}
    		
    		input.close();
    
    	}
    
    }

    さいきかんすう

  • 難しい...✨✨
  • import java.util.Scanner;
    
    public class Main {
    
    	public static int fibo(int k) {
    		if (k == 1 || k == 2)
    		{
    			return 1;
    		}
    		else
    		{
    			return fibo(k - 1) + fibo(k - 2);
    		}
    	}
    	
    	public static void main(String[] args) {
    		
    		Scanner input = new Scanner(System.in);
    		System.out.println("몇 번째 피보나치 수열?");
    		int N = input.nextInt();
    		
    		if (N == -1)
    		{
    			System.out.println("값이 존재하지 않는다.");
    		}
    		else 
    		{
    			System.out.println("다음과 같다 : " + fibo(N));
    		}
    		
    		input.close();
    	}
    
    }

    👀👀 複雑すぎる欠点!!効率が低すぎて、時間が長すぎます.
    ->この問題を解決するためにダイナミックプログラムが必要です

    Ref

  • 生活コードJAVA 1
  • w3schools JAVA
  • 羅東彬