Giới thiệu về thuật toán kiểm tra xem một số có phải là phần tử của dãy Fibonacci hay không.
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch,
system("pause") or input loop */
int isFibonacci(int n);
int main(int argc, char *argv[])
{
int n;
do
{
printf("Enter a number: ");
scanf("%d", &n);
if(isFibonacci(n)==1)
printf("It is a Fibonacci element\n");
else printf("It is not a Fibonacci element\n");
} while (n > 1);
getch();
return 0;
}
int isFibonacci(int n)
{
int t1 = 1, t2 = 1, f = 1;
if(n==1)
return 1;
while (f<n)
{
f = t1 + t2;
t1 = t2;
t2 = f;
}
return n==f;
}
void printFibonacci(int n)
{
int i=1;
for(i;i<=n;i++)
{
if(isFibonacci(i)==1)
{
printf("%d\t", i);
}
}
}
Đầu tiên chúng ta tìm hiểu dãy Fibonacci là gì: Dãy Fibonacci là dãy vô hạn các số tự nhiên bắt đầu bằng hai phần tử 0 hoặc 1 và 1, các phần tử sau đó được thiết lập theo quy tắc mỗi phần tử luôn bằng tổng hai phần tử trước nó. Công thức của dãy Fibonacci là:
Chương trình định nghĩa một hàm isFibonacci và hàm main.
Hàm isFibonacci nhận một số nguyên n làm đối số và trả về một số nguyên. Nó kiểm tra xem số n có phải là phần tử của dãy Fibonacci hay không. Trong hàm này, ba biến t1, t2, và f được khởi tạo ban đầu là 1. Nếu n là 1, nó trả về 1, cho biết rằng nó là một phần tử Fibonacci. Trong vòng lặp while, f được tính bằng tổng của hai số trước đó t1 và t2, sau đó t1 và t2 được cập nhật. Nếu n bằng f, nó trả về 1, ngược lại trả về 0.
Trong hàm main
- Một biến số nguyên n được khai báo.
- Chương trình vào một vòng lặp do-while, chạy cho đến khi giá trị của n lớn hơn 1.
- Trong vòng lặp, người dùng được nhắc để nhập một số và sau đó isFibonacci được gọi với số đó. Nếu kết quả trả về là 1, thông báo rằng số đó là một phần tử của dãy Fibonacci được in ra. Ngược lại, thông báo rằng số đó không phải là một phần tử của dãy Fibonacci.