Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Khắc phục nhược điểm của Đệ quy

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    17

    Mặc định Khắc phục nhược điểm của Đệ quy

    Các pro ơi,giúp với.Thầy mình bảo,để khắc phục đc nhược điểm của đệ quy ( chiếm nhiều bộ nhớ ) thì ta sử dụng mảng.Mình đã thử tìm cách nhưng vẫn không làm được.Giúp với!!!!

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Khắc phục nhược điểm của đệ quy là dùng vòng lặp chứ dùng mảng là sao bạn ? Có thể explain rõ hơn dc ko ?^^

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    17

    Tớ cũng chịu^^.Thế tớ mới không làm được.Vì vậy tớ lên đây hỏi xem có ai biết không ==".Thầy bảo,sau mỗi bước gọi đệ quy thì gán giá trị vừa tìm được vào một phần tử của mảng.Ví dụ số Fib ý.Có a[0]=Fib(1)=1,a[1]=Fib(2)=1 => Fib(3)=Fib(2)+Fib(1)=2.Gán giá trị vừa tìm được cho a[2].Thì sau đó Fib(4)=a[3]=a[2]+a[1]=2+1=3...Thầy bảo nếu làm cách đó thì khi gọi Fib(3000) thì sẽ ko bị overflow

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi minhtuan.a0 Xem bài viết
    Tớ cũng chịu^^.Thế tớ mới không làm được.Vì vậy tớ lên đây hỏi xem có ai biết không ==".Thầy bảo,sau mỗi bước gọi đệ quy thì gán giá trị vừa tìm được vào một phần tử của mảng.Ví dụ số Fib ý.Có a[0]=Fib(1)=1,a[1]=Fib(2)=1 => Fib(3)=Fib(2)+Fib(1)=2.Gán giá trị vừa tìm được cho a[2].Thì sau đó Fib(4)=a[3]=a[2]+a[1]=2+1=3...Thầy bảo nếu làm cách đó thì khi gọi Fib(3000) thì sẽ ko bị overflow
    Dùng mảng chỉ là công cụ, phương tiện để chứa các kết quả Fibonacci vào đó. Việc bạn dùng mảng hay ko dùng mảng chỉ mang tính hình thức chứa dữ liệu. Tất nhiên dùng mảng sẽ ko sai, vẫn chính xác.
    Còn nguyên lý khử đệ quy là phải lặp , bạn phải đặt công việc cần làm trong vòng lặp .

    Có cách này hay hơn cách của thầy bạn là sẽ ko tốn bộ nhớ để Cấp phát cho 1 mảng nhiều phần tử đến thế.

    Bạn cho 3 biến, a , b , c . Với a là số fibo (n-2) , b là số fib(n-1) . và c là fib(n) tức c=a+b. Tính xong bạn gán lại a=b; b=c; . RỒi lại tiếp tục vòng lặp

    Còn cách này hay hơn nữa là chả cần biến búng , lặp liếc gì hết. Mới vào là return ngay kết quả luôn. Bạn thích tìm hiểu thì có thể tìm đọc nội dung: Hệ thức truy hồi, giải hệ thức truy hồi

  5. #5
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    ngoài ra còn có thể sử dụng tail recursion

Các đề tài tương tự

  1. Con trỏ trên C Cách khắc phục lỗi.
    Gửi bởi cauberong09 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 24-02-2012, 05:00 PM
  2. Giao khả so sánh và giao diện khả tuần tự ??
    Gửi bởi phuongtv_hvktqs trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 02-07-2011, 12:00 PM
  3. Tìm mật khẩu
    Gửi bởi nguyenvanvien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 8
    Bài viết cuối: 30-06-2009, 09:53 PM
  4. Sai mật khẩu
    Gửi bởi kegiaumat055 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 20-05-2008, 11:45 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn