Minggu, 13 April 2014

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