再帰的な定義?再帰はいつ使用しますか?再帰モデル?再帰実行プロセス?よくある再帰思想の例題と実現?
再帰
再帰定義:再帰とは、関数の定義で関数自体を呼び出す方法です.
例題はn(nは正の整数)の階乗を求めます
ここで注意しなければならないのは,再帰問題の解法過程では一般的に値を返す必要があり,再帰問題で値を返さないと構文エラーを引き起こすことである.
再帰メソッド1を使用するタイミング1.定義は再帰的であり、例えば階乗とフィボナッチ数列を求める.データ構造は、単一チェーンテーブル3のように再帰的である.問題を解く方法はバチカ問題のように再帰的である.
再帰モデル再帰モデルは再帰体と再帰終結条件に分けられ,両者は不可欠である.
この簡単な例では、再帰体は(fun(n-1)*n)、終結条件はif(n=1)である.
再帰的実行プロセス
よくある再帰思想の例題1.n階乗を求めるフィボナッチ数列
3.n皇后问题n皇后问题:n皇后をN*Nの碁盤の中に置いて、お互いに攻撃してはいけません.何種類の置き方がありますか.それぞれの置き方は具体的にどうですか.八皇后問題の核心思想は、前の検査行列の4つの斜方位を置くことだ.
4.ハニオ問題
再帰定義:再帰とは、関数の定義で関数自体を呼び出す方法です.
例題は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.ハニオ問題