Membuat Deret Bilangan Fibonacci dengan C

Bagi yang sedang mempelajari pemrograman, apalagi yang sedang belajar di kuliah, maka sering anda diberikan tugas pemrograman yang bertujuan mengasah skill pemrograman anda. Tak jarang, untuk kebanyakan pemula sering kebingungan bagaimana untuk membuat program yang diminta. Maka kali ini, saya akan membahas bagaimana untuk membuat program untuk mencetak bilangan fibonacci. Sebelum kita membuatnya, mari kita bahas terlebih dahulu apakah itu bilangan fibonacci.


Sekilas tentang bilangan fibonacci

Bilangan fibonacci dapat diartikan sebagai bilangan yang merupakan hasil dari penjumlahan dari bilangan sebelumnya. Secara umum, fungsi bilangan fibonacci dapat dituliskan seperti berikut:

fibo_ilst

Dengan aturan diatas, maka suatu deret fibonacci dapat dituliskan sebagai berikut:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, dst…

Selain dengan rumus fungsi diatas, anda dapat mencarinya dengan persamaan berikut:

fibo_func2


Contoh algoritma

Setelah kita mengetahui apa itu bilangan fibonacci, sekarang kita mulai untuk implementasinya. Saya sendri lebih menggunakan aturan pertama yang menurut saya lebih sederhana dan tidak perlu mendeklarasikan fungsi lainnya (seperti math.h) selain fungsi utama untuk input/output.

/* Membuat deret bilangan fibonacci
 * Coded by FARISSS (thekill96[at]gmail.com
 * Website: https://www.khayalan.id
 */

#include <stdio.h>

int main()
{
	
	int  banyak, itung;
	unsigned long fn, n_min1, n_min2; /* Gunakan unsigned long, */

	/* Minta input untuk menentukan n baris bilangan fibonacci */
	printf("Besarnya batas f(n) baris bilangan fibonacci yang mau ditampilkan: ");
	scanf("%d", &banyak);

	/* Mulai menampilkan barisan bilangan */
	printf("\nBarisan bilangan fibonacci:\n");
	fn = 0;
	for (itung = 0; itung <= banyak; itung++)
	{
		/* Geser f(n-1) ke nilai f(n-2), lalu f(n-1) ambil dari baris terakhir */
		n_min2 = n_min1;
		n_min1 = fn;

		/* Hitung baris fn sekarang, jika n>1, maka gunakan nilai f(n-1)+f(n-2) */
		fn = itung > 1? n_min1+n_min2: itung;
		printf("f(%d) = %li\n", itung, fn);
	}

	return 0;

}

Adapun kerja program ini, pengguna menginputkan banyak jumlah n baris yang akan dikeluarkan, dan program akan keluar seperti berikut

fibo_out

Loh, bukannya kita mau membuat deret bilangan fibonacci? Inikan baris bilangan fibonacci?

Tenang, hanya dengan sedikit perubahan, kita dapat merubahnya menjadi baris fiboancci  :cool

Ubah baris ke 19 menjadi berikut (perhatikan pada \n nya):

printf(“\nBarisan bilangan fibonacci: “);

Karena kita akan mengubah dari baris ke deret, ubah baris ke 29 menjadi:

printf(“%li “, fn);

Maka hasil outputnya menjadi…

fibo_out2

Kemudian, untuk variabel yang menampung nilai itu sendri, saya gunakan unsigned long, untuk memperluas jangkauan angka (dan untuk membuat deret ini, kita tidak perlu bilangan negatif bukan?).

Catatan: Dikarenakan batasan besarnya variabel unsigned long, program hanya mampu
menghitung secara benar hingga f(92) = 7540113804746346429 (jika dicompile
dengan gcc) atau f(46) = 1836311903 (jika dicompile dengan MS Visual C++ 6.0).

Referensi: wikipedia, untuk sebagian penjelasan mengenai bilangan fibonacci.