Rumah  >  Artikel  >  tutorial komputer  >  Saya ingin meminta semua orang untuk penjelasan terperinci tentang algoritma rekursif dalam java.

Saya ingin meminta semua orang untuk penjelasan terperinci tentang algoritma rekursif dalam java.

WBOY
WBOYke hadapan
2024-01-07 12:14:39426semak imbas

Saya ingin meminta penjelasan terperinci tentang algoritma rekursif dalam Java

Ujian kelas awam{

public static int getResult(int parameter) {

jika (parameter == 0) { pulangan hasil; } lain { hasil *= parameter; return recursiveFunction(parameter - 1, hasil); }

nombor pemulangan;

}

utama kekosongan statik awam(String[] args) { //Tulis kod anda di sini }

int hasil = hasil(5);

System.out.println(hasil);

}

}

Prinsip pelaksanaannya adalah seperti berikut:

hasil(5) Pada mulanya, masukkan badan fungsi untuk menentukan sama ada parameter kurang daripada atau sama dengan 1. Pada masa ini, parameter bersamaan dengan 5 dan keadaan tidak ditetapkan Parameter*hasil(parameter-1) dilaksanakan. iaitu, 5 * hasil(5-1), dan program dilaksanakan berulang kali ...

5*keputusan(5-1)

4*keputusan(4-1)

3*keputusan(3-1)

2 * hasil(2 - 1) Pada ketika ini, parameter adalah sama dengan 1 dan memenuhi syarat Fungsi mengembalikan 1 dan lapisan demi lapisan kembali. Iaitu:

hasil(1) =1

2*hasil(1)=2*1=2

3*hasil(2)=3*2=6

4*hasil(3)=4*6=24

5*hasil(4)=5*24=120

Gunakan kaedah rekursif dalam java untuk menyusun sepenuhnya n nombor tanpa pendua n 3

Programnya adalah seperti berikut, format input ialah:

5

3 1 2 1 2 bermakna baris pertama ialah nombor, menunjukkan bilangan nombor yang akan dimasukkan seterusnya. Baris kedua mempunyai n nombor, mewakili nombor yang akan diisih Input menganggap bahawa nombor yang akan diisih adalah semua nombor bukan negatif.

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Arrays;

import java.util.Scanner;

kelas awam Utama {

maksimum int akhir statik = 1000;

int n; //Bilangan elemen tatasusunan

int[] a; // tatasusunan

boolean[] digunakan; // Pembolehubah tambahan, digunakan untuk menandakan sama ada elemen telah digunakan semasa proses rekursif, digunakan[i] menunjukkan sama ada elemen ke-i telah digunakan

int[] cur; // Simpan nombor susunan semasa

// Cetak keseluruhan susunan secara rekursif tanpa pendua, sedang mencetak ke kedudukan idx

kosongkan print_comb(int idx) {

Jika idx == n, ia bermakna elemen terakhir telah dilalui dan cur boleh dikeluarkan.

untuk(int i = 0; i

jika(i > 0) System.out.print(" ");

System.out.print(cur[i]);

}

System.out.println();

}

int last = -1; // Untuk mengelakkan pertindihan, gunakan pembolehubah terakhir untuk merekodkan nilai carian terakhir

untuk(int i = 0; i

jika(digunakan[i]) teruskan;

jika(terakhir == -1 || a[i] != terakhir) { // Hanya apabila nombor semasa tidak diulang dan tidak digunakan, rekursi akan diteruskan

terakhir = a[i];

cur[idx] = a[i];

//Kaedah backtracking

digunakan[i] = benar;

print_comb(idx + 1);

digunakan[i] = palsu;

}

}

}

public void go() membuang FileNotFoundException { // Laksanakan badan kaedah }

{

Scanner in = new Scanner(new File("data.in")); Sintaks adalah untuk mencipta objek Pengimbas yang dinamakan dalam, yang digunakan untuk membaca input daripada fail bernama data.in.

// Baca data dan susun

n = in.nextInt();

a = int[n] baharu;

untuk (int i = 0; i

Arrays.sort(a);

// Mulakan pembolehubah tambahan dan mulakan susunan penuh tanpa pertindihan

cur = new int[n];

digunakan = boolean baharu[n];

untuk(int i = 0; i

sikat_cetak(0);

dalam.dekat();

}

public static void main(String[] args) membuang FileNotFoundException { Ini adalah kaedah utama dalam program Java, digunakan untuk memulakan kemasukan program. Dalam kaedah ini, kita boleh melakukan beberapa operasi, seperti membaca fail, memproses data, dsb. Antaranya, lontaran FileNotFoundException menunjukkan bahawa fail yang tidak ditemui pengecualian mungkin berlaku semasa pelaksanaan Jika pengecualian ini berlaku, program akan membuang pengecualian FileNotFoundException. Dalam kaedah ini, anda boleh menulis logik kod khusus untuk mengendalikan pembacaan fail dan pengendalian pengecualian.

Baharu Utama().go();

}

} Secara objektif, pilih atur penuh tidak rekursif dan tidak berulang adalah agak mudah dan cekap.

Apakah peranan rekursi dalam java? Mengapa menggunakan rekursi

Dua soalan awak sebenarnya satu soalan kan?

Peranan rekursi: Algoritma rekursif boleh menyelesaikan beberapa masalah yang ditakrifkan oleh rekursi.

Pertama, kita perlu memahami apakah masalah definisi rekursif. Ringkasnya, masalah yang ditakrifkan secara rekursif ialah masalah besar yang mengandungi masalah yang lebih kecil yang mempunyai struktur yang sama tetapi saiznya lebih kecil.

Sebagai contoh, definisi n faktorial boleh difahami sebagai:

n!= n*(n-1)!

Tidak sukar untuk membuat kesimpulan daripada analisis di atas bahawa (n-1) adalah masalah yang lebih kecil daripada n!. Dengan terus menguraikan masalah mengikut kaedah ini, kita boleh mendapatkan beberapa data asas yang diketahui. Kemudian, melalui terbitan terbalik, kita boleh mendapatkan hasil akhir.

Algoritma faktorial bagi

n adalah seperti berikut:

int statik peribadi jieCheng(int n) { Ini ialah kaedah pengiraan faktorial, di mana parameter n mewakili nilai yang akan dikira. Berikut adalah penjelasan terperinci: - "peribadi" bermaksud kaedah itu hanya boleh dilihat dalam kelas semasa dan tidak boleh diakses oleh kelas lain. - "statik" bermaksud kaedah tersebut adalah kaedah statik dan boleh dipanggil terus melalui nama kelas tanpa membuat instantiating objek. - "int" bermaksud kaedah mengembalikan nilai integer sebagai hasilnya. - "jieCheng" ialah nama kaedah, yang boleh dinamakan mengikut keperluan.

jika(n==1)

kembali 1;

lain {

kembali n*jieCheng(n-1);

}

}

Selain itu, definisi pokok binari juga adalah rekursif, yang bermaksud bahawa banyak operasi pokok binari dilaksanakan melalui rekursi.

Menggunakan rekursi menjadikan program ini agak ringkas.

Aplikasi rekursi dalam java! f20 1 f21 4 fn 2 2 fn 1 fnmana

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Ujian kelas awam {

publicstaticintf(intn){

jika(n==20){

kembali1;

}elseif(n==21){

kembali4;

}elseif(n

returnf(n+2)-2*f(n+1);

}lain{

kembali2*f(n-1)+f(n-2);

}

}

utama kekosongan statik awam(String[] args) {

System.out.println(f(10)); //Cetak nilai f(10)

}

}

Ia telah diuji Masukkan f(n) dalam fungsi utama, di mana n ialah parameter yang dilaraskan secara manual, dan hasil output yang sepadan boleh diperolehi.

Atas ialah kandungan terperinci Saya ingin meminta semua orang untuk penjelasan terperinci tentang algoritma rekursif dalam java.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:docexcel.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam