[Javaアルゴリズム]7-4.フィボナッチへの復帰(注釈バージョン)
17132 ワード
🌼 Problem
🍪 講師ソリューション-for文を使うとは思わなかった...
import java.util.Scanner;
public class _74_피보나치수열 {
public static int Solution(int n){
if(n==1) return 1;
else if(n==2) return 1;
else{
Solution(n-1);
return Solution(n-2)+Solution(n-1);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
for(int i = 1; i <= input; i++){
System.out.print(Solution(i)+ " ");
}
}
}
[結果]🍪 講師ソリューション2-再パッケージ(アレイ使用)
import java.util.Scanner;
public class _74_피보나치수열 {
static int[] fibo;
public static int Solution(int n){
if(n==1) return fibo[1] = 1;
else if(n==2) return fibo[2] = 1;
else{
Solution(n-1);
return fibo[n] = Solution(n-2) + Solution(n-1);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
fibo = new int[input+1];
Solution(input);
for(int i = 1; i <= input; i++){
System.out.print(fibo[i]+ " ");
}
}
}
ソリューション()を呼び出すたびに、fibo[]に1回だけ呼び出されて格納する必要はありません.その結果fibo[]配列に格納された値をfor文に出力し、実行速度を速めます.
🍪 講師ソリューション3-再構築(注釈テンプレートを使用)
import java.util.Scanner;
public class _74_피보나치수열 {
static int[] fibo;
public static int Solution(int n){
if(fibo[n]>0) return fibo[n];
if(n==1) return fibo[1] = 1;
else if(n==2) return fibo[2] = 1;
else{
Solution(n-1);
return fibo[n] = Solution(n-2) + Solution(n-1);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
fibo = new int[input+1];
Solution(input);
for(int i = 1; i <= input; i++){
System.out.print(fibo[i]+ " ");
}
}
}
[結果]if(fibo[n]>0)
=fibo[n]の値は既に存在します.再演算を必要とせずに
return fibo[n]
を行うことができるため、速度効率が大幅に向上する.Reference
この問題について([Javaアルゴリズム]7-4.フィボナッチへの復帰(注釈バージョン)), 我々は、より多くの情報をここで見つけました https://velog.io/@dingdoooo/Java알고리즘-7-4.-피보나치-재귀메모이제이션テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol