Tin học Dãy Fibonacci trong Pascal

Nhật Hạ !

Học sinh chăm học
Thành viên
14 Tháng tư 2019
409
292
76
18
Quảng Nam
THCS Lê Quang Sung
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Dãy Fibonacci là dãy: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 … Hãy tìm qui luật của dãy số trên. Viết Chtrinh:
a) Xuất ra dãy số Fibonacci gồm n phần tử.
b) Nhập số M, hãy ktra số M có thuộc dãy Fibonacci hay không; Nếu có thì cho biết đó là số Fibo thứ mấy
c) Phân tích một số thành tổng của các số Fibonacci khác nhau. Vd Nhập 70, Xuất 70 = 55 + 13 + 2

#Giúp mình câu C với ạ. Ý tưởng mình là tìm số Fibo lớn nhất nhỏ hơn số cần phân tích thành tổng, sau đó lần lượt đến những số Fibo nhỏ lại dần.
 

Tiến Phùng

Cựu Cố vấn Toán
Thành viên
27 Tháng mười 2018
3,742
3,705
561
Hà Nội
Trường Đại học Bách Khoa Hà Nội
vì a ko biết gì pascal mà biết c++ nên là nói ý tưởng thôi nhé
Khai báo 1 mảng rỗng để chứa các số fibo phân tích thành công
Sử dụng 2 biến Fibo và FiboPre gán =1
Sau đó chạy vòng while(Fibo+FiboPre<=n)(n là số cần phân tích)
{ khai báo tmp = Fibo;
Fibo=Fibo+FiboPre;
Gán FiboPre=tmp;
}
Như vậy khi vòng while dừng, ta có số Fibo lớn nhất nhỏ hơn hoặc bằng n
Gán biến Fibo này vào mảng
lúc này ta gọi đệ quy function(n-Fibo)
Đệ quy sẽ dừng khi n-Fibo=0
 

Nhật Hạ !

Học sinh chăm học
Thành viên
14 Tháng tư 2019
409
292
76
18
Quảng Nam
THCS Lê Quang Sung
vì a ko biết gì pascal mà biết c++ nên là nói ý tưởng thôi nhé
Khai báo 1 mảng rỗng để chứa các số fibo phân tích thành công
Sử dụng 2 biến Fibo và FiboPre gán =1
Sau đó chạy vòng while(Fibo+FiboPre<=n)(n là số cần phân tích)
{ khai báo tmp = Fibo;
Fibo=Fibo+FiboPre;
Gán FiboPre=tmp;
}
Như vậy khi vòng while dừng, ta có số Fibo lớn nhất nhỏ hơn hoặc bằng n
Gán biến Fibo này vào mảng
lúc này ta gọi đệ quy function(n-Fibo)
Đệ quy sẽ dừng khi n-Fibo=0

Phần đệ quy function viết như nào ạ?
 

Tiến Phùng

Cựu Cố vấn Toán
Thành viên
27 Tháng mười 2018
3,742
3,705
561
Hà Nội
Trường Đại học Bách Khoa Hà Nội
đây ví dụ như c++, có vẻ khác pascal chút thôi:
vector<int> arr;( đây là khai báo array kiểu số nguyên của c++)
void Recursive(n)
{ int Fibo=1; int FiboPre=1;

while(Fibo<=n)
{ int tmp=Fibo;
Fibo=Fibo+FiboPre;
FiboPre=tmp;
}
arr.pushback(Fibo) ( đặt số Fibonacci lớn nhất <=n vào mảng);
if(Fibo==n) return; ( nếu Fibo đã = n thì return, thoát hàm)
else Recursive(n-Fibo) (gọi đệ quy lại hàm Recursive với biến n lúc này trở thành n-Fibo)
}
 
  • Like
Reactions: Nhật Hạ !
Top Bottom