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

Đề tài: Đệ quy khó quá mọi người. Ai giúp em bài này với ạ

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

    Mặc định Đệ quy khó quá mọi người. Ai giúp em bài này với ạ

    Cho dãy số A = {4, 3, -2, -6, -5, 0, 4, …}
    - Xây dựng định nghĩa đệ quy cho việc tính An (n ≥ 0).
    - Xây dựng giải thuật đệ quy tính An.
    - Tính A10
    Quy luật dãy số trên là số thứ nhất công với số thứ 4 bằng -2
    Ai giúp em bài này với

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    1,005

    Đây là bài test khả năng nhanh nhạy của sinh viên chứ không phải hướng đến lập trình hay đệ quy gì cả.
    Quy luật dãy số trên là số thứ nhất công với số thứ 4 bằng -2, ta thử xét số thứ nhất (st1) số thứ 4 (st4) số thứ 7 (st7) và các +=3 tiếp theo.

    st1 + st4 = -2 => st4 = -2 - st1
    st4 + st7 = -2 => st7 = -2 - st4 = -2 -(-2 - st1) = -2 + 2 + st1 = st1

    Như vậy một dãy số tương tự với khởi động 3 giá trị đầu bất kỳ sẽ luôn luôn lặp lại với chu kỳ lặp là 6.
    Ba giá trị khởi động đầu tiên của dãy là phải được cho trước, 3 giá trị kế tiếp tính được dễ dàng từ 3 giá trị đầu tiên theo quy luật bài toán đã cho.
    Từ đây ta có công thức tính An với n>6: A(n) = A(n%6).
    Bạn thấy có cần lập trình hay không nhỉ !!!

    Nhưng thôi, cứ cho là chúng ta không biết gì cả, chỉ biết làm thôi, và xem như cũng chẳng biết cái A(n) = A(n%6), thì đây.

    C++ Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <time.h>
    4.  
    5. int Loop(int iCur, int nValue, int n)
    6. {
    7.     if (iCur >= n)
    8.         return nValue;
    9.     // Trả về giá trị số kế tiếp của bước nhảy 3 chỉ mục
    10.     return Loop(iCur + 3, -(nValue + 2), n);
    11. }
    12. int main()
    13. {
    14.     // Tạo dữ liệu ngẫu nhiên
    15.     srand((unsigned int)time(0));
    16.     //int A[3] = { 4, 3, -2 };      // Các giá trị khởi động của dãy
    17.     int A[21] =
    18.     {
    19.         // Lấy 3 giá trị khởi động tổng quát hơn
    20.         (rand() % 10) * (rand() % 2 ? 1 : -1),
    21.         (rand() % 10) * (rand() % 2 ? 1 : -1),
    22.         (rand() % 10) * (rand() % 2 ? 1 : -1)
    23.     };
    24.  
    25.     printf(" Day so A = {");// x + y = -2
    26.     // In thêm một số chu kỳ cho dễ kiểm tra
    27.     for (int i = 3; i < 21; i+=3)
    28.     {
    29.         A[i] = -(A[i - 3] + 2);
    30.         A[i+1] = -(A[i - 2] + 2);
    31.         A[i+2] = -(A[i - 1] + 2);
    32.     }
    33.     for (int i = 0; i < 21; i++)
    34.         printf("%d, ", A[i]);
    35.     printf("...}\n\n");
    36.  
    37.     int n = rand() % 100;           // n [0,100) - Hoặc lấy giá trị cố định n = 10 như đề bài yêu cầu
    38.     // Chạy giải thuật và in kết quả
    39.     printf(" A(%d) = %d\n\n", n, Loop(n % 3, A[n % 3], n));
    40.  
    41.     system("pause");
    42.     return 0;
    43. }


    .
    .

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