Sebuah fungsi rekursif adalah fungsi yang memanggil dirinya sendiri
baik secara langsung maupun tidak langsung. Jika fungsi rekursif disebut dengan
base case, fungsi hanya mengembalikan hasilnya. Jika fungsi disebut dengan
masalah yang lebih kompleks, fungsi membagi masalah ke dalam dua konseptual
potongan : sepotong fungsi tahu
bagaimana melakukannya dan versi yang sedikit lebih kecil dari masalah aslinya. Karena masalah baru ini
tampak seperti masalah asli , fungsi rekursif membuat sebuah panggilan untuk
bekerja pada masalah yang lebih kecil .
Untuk rekursi untuk mengakhiri , setiap kali fungsi rekursif menyebut
dirinya dengan versi yang sedikit lebih sederhana dari masalah asli , urutan
masalah yang lebih kecil dan lebih kecil harus berkumpul di base case. Bila
fungsi mengakui kasus dasar , hasilnya dikembalikan ke fungsi panggilan
sebelumnya, dan urutan pengembalian terjadi sampai panggilan asli dari Fungsi
akhirnya kembali ke hasil akhir .
Standar C tidak menentukan urutan di mana operan dari sebagian besar
operator ( including + ) untuk dievaluasi . Dari sekian banyak operator C ,
standar menentukan urutan evaluasi operan hanya operator && , | | , koma
( , ) operator dan : ? . Pertama dari ini
operator biner yang dua operan dievaluasi dari kiri ke kanan . Operator terakhir hanya ternary C operator. Operator
paling kiri dievaluasi pertama; jika operator paling kiri bernilai nol
,operator tengah dievaluasi berikutnya dan operator terakhir diabaikan ; jika
mengevaluasi operator paling kiri ke nol , operator ketiga dievaluasi berikutnya
dan operator tengah diabaikan.
Contoh:
/* Fig. 5.14: fig05_14.c
Recursive factorial function */
#include <stdio.h>
long factorial( long number ); /* function
prototype */
/* function main begins program execution */
int main( void )
{
int i;
/* counter */
/* loop
11 times; during each iteration, calculate
factorial( i ) and display result */
for ( i
= 0; i <= 10; i++ ) {
printf(
"%2d! = %ld\n", i, factorial( i ));
} /*
end for */
return
0; /* indicates successful termination */
} /*
end main */
/* recursive definition of function factorial
*/
long factorial( long number )
{
/* base case */
if ( number <= 1 ) {
return 1;
} /* end if */
else { /* recursive step */
return ( number * factorial( number - 1 ) );
} /* end else */
} /* end function factorial */
0 komentar:
Posting Komentar