再帰的な定義?再帰はいつ使用しますか?再帰モデル?再帰実行プロセス?よくある再帰思想の例題と実現?


再帰
再帰定義:再帰とは、関数の定義で関数自体を呼び出す方法です.
例題はn(nは正の整数)の階乗を求めます
int fun(int n){
     if(n==1) {
       return  0;
     }
      else {
     return (fun( n-1)*n);
     }
}

ここで注意しなければならないのは,再帰問題の解法過程では一般的に値を返す必要があり,再帰問題で値を返さないと構文エラーを引き起こすことである.
再帰メソッド1を使用するタイミング1.定義は再帰的であり、例えば階乗とフィボナッチ数列を求める.データ構造は、単一チェーンテーブル3のように再帰的である.問題を解く方法はバチカ問題のように再帰的である.
再帰モデル再帰モデルは再帰体と再帰終結条件に分けられ,両者は不可欠である.
int fun(int n){
     if(n==1) {
       return  0;
     }
      else {
     return (fun( n-1)*n);
     }
}

この簡単な例では、再帰体は(fun(n-1)*n)、終結条件はif(n=1)である.
再帰的実行プロセス
よくある再帰思想の例題1.n階乗を求める
int fun(int n){
     if(n==1) {
       return  0;
     }
      else {
     return (fun( n-1)*n);
     }
}
  • フィボナッチ数列
  • int Fit(int n){
         if(n==1||n==2) {
           return  1;
         }else {
         return (Fit( n-1)*Fit(n-2));
         }
    }
    

    3.n皇后问题n皇后问题:n皇后をN*Nの碁盤の中に置いて、お互いに攻撃してはいけません.何種類の置き方がありますか.それぞれの置き方は具体的にどうですか.八皇后問題の核心思想は、前の検査行列の4つの斜方位を置くことだ.
    package NQueensDG;
     
    import java.util.Scanner;
     
    public class NQUEENSDIGUI {
     
    
    	//       --------------------------------------------------
    	static int n;//    
    	static int []x;//   
    	static long sum;
    	
    	//      ----------------------------------------------------
    	
    	NQUEENSDIGUI(int nn){
    		n =nn;
    		sum =0;
    		x = new int [n+1];
    		for(int i=0;i <= n ;i++)x[i]=0;//     0
    		backtrack(1);
    	}
    	
    	private void backtrack(int t) {
    		// TODO          
    		if(t > n){
    			sum++;
    			print(x);
    		}
    		else
    			for(int i=1;i<=n;i++){
    				x[t]=i;
    				if(place(t))backtrack(t+1);//    ,    
    			}
    	}
     
    	private void print(int[] x2) {
    		System.out.println((x2.length-1)+"     :");
    		for(int i=1;i<=n;i++){
    			System.out.print(" "+x2[i]);
    		}
    		System.out.println("");
    	}
     
    	private boolean place(int k) {
    		for(int j=1;j < k;j++){
    			if((Math.abs(k-j) == Math.abs(x[j]-x[k]))||(x[j] == x[k]))return false;
    		}
    		return true;
    	}
     
    	public static void main(String[] args) {
    		int s;
    		Scanner input = new Scanner(System.in);
    		s = input.nextInt();
    		NQUEENSDIGUI a = new NQUEENSDIGUI(s);
    		System.out.println("---------------------------------");
    		System.out.println("   "+s+"     ");
    		System.out.println(s+"     :"+sum+"  !");
    		input.close();
    	}
    }
    

    4.ハニオ問題