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

Đề tài: viết phần tử thứ n của cấp số cộng bằng đệ quy

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

    Mặc định viết phần tử thứ n của cấp số cộng bằng đệ quy

    mấy hôm nay mày mò đệ quy thấy khó quá:( có bài tập là viết số hạng thứ n của cấp sô cộng bằng đệ quy mình code nhưng sai ,các bạn sửa giúp mình
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<iostream>
    
    using std::cout;
    using std::cin;
    int csc(int a,int n,int s)
    {
        if(n==1)return a;
        return(csc(a,n-1,s)+s);
    }
    main()
    {
          int a,s,n;
          cout<<"nhap so ";
          cin>>a;
          cout<<"cong sai" ;
          cin>>s;
          cout<<"nhap n";
          cin>>n;
          cout<<csc(a,s,n);
          getch();
    }
    đọc bài của admin mà thấy chưa hiểu hết : nhờ các bạn giải thích:
    ở đệ quy có giá trị gọi là suy biến ,ở đây mình thấy các bạn coi nó là 1 cận để dừng chương trình
    nhưng ở code tính giai thừa thì 1 là giá trị suy biến:

    Code:
    unsigned long fac(int n) // Hàm tính giai thừa
    {
      if(n==0) return (1); // Trường hợp suy biến.
      return (n*fac(n-1)); // Gọi đệ quy.
    }
    nhưng như vậy theo mình thì nó sẽ lui n xuống dần và tới 1 lúc nào đó thì nó n=1 và sẽ return 1???tại sao lại như vậy??

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

    Bài của bạn sai gì ?
    Nhập vào cái gì và màn hình in ra cái gì?
    Sai chỗ nào? Sai ra làm sao ?
    Um Mani Padme Hum...!!

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

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Bài của bạn sai gì ?
    Nhập vào cái gì và màn hình in ra cái gì?
    Sai chỗ nào? Sai ra làm sao ?
    thôi không cần nữa mình biết chỗ sai rồi
    Code:
    cout<<csc(a,n,s);
    , bạn chỉ giải thích giúp mình phần ở dưới thôi

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

    Đã tự sửa dc bài của bản thân thì vận dụng sự hiểu biết của bài đó để hiểu bài ở dưới
    Rất là đơn giản
    Không lý gì tự làm dc 1 bài rồi còn 1 bài tương tự vậy không biết ?
    _____
    Bày cho bạn cách nhìn tổng quát của đệ quy :

    1- Trường hợp suy biến (tức điểm dừng của thuật toán, hay phần tử đầu tiên trong dãy của bài toán) : Dừng thuật toán. Cái này là quan trọng.
    Cái này là do ĐẶC THÙ của từng bài toán. Và luôn phải có.
    Ví dụ bài tìm kiếm trong dãy a1...an .Tìm 1 phần tử =x
    C++ Code:
    1. int Tim(int a[], int n, int x)
    2. {
    3.      if(n==0) //Đây là 1 trường hợp suy biến. Nếu n==0 tức là dãy ko có phần tử nào. Ko có phần tử nào thì tìm gì nữa cho mệt ?
    4.          return 0; //return 0 để biểu thị : Là dãy này ko có phần tử nào = x
    5.      if(a[n] ==x) // Đây là trường hợp suy biến thứ 2. Nếu nhắm mắt nhắm mũi nhìn con số cuối cùng, nếu nó =x thì :
    6.          return n; // return vị trí của nó;
    7.      return Tim(a,n-1,x); // Trường hợp đệ quy, giao cho thằng em làm
    8. }
    VD với bài Dãy cấp số cộng trên:
    Thì với đầu vào là n=1 , Thì tức là hỏi ngay số hạng đầu tiên của dãy. Thì nhắm mắt cũng biết là nó = a, vậy đó là suy biến. Đó là ĐẶC THÙ của bài này
    VD với bài Lũy thừa :
    Thì với đầu vào n=1 , tức là a^1 , thì nhắm mắt cũng biết nó =a. Đó là suy biến. Đó là ĐẶC THÙ của bài này
    2- Nếu không phải là suy biến : , trường hợp ĐỆ QUY
    Tìm cách biểu diễn "Thằng anh" thông qua "Thằng em" , và chỉ cần tin tưởng "thằng em" làm tốt . Thằng em này mình tin tưởng nó làm việc tốt rồi đó, chỉ cần sử dụng kết quả của nó . Chỉ cần tiin tưởng và tin tưởng, không cần quan tâm nó làm cái gì.

    Trong đó:
    "Thằng anh" : Bài toán lớn đang giải quyết, có miền rộng
    "Thẳng em" : Cũng là bài toán đó nhưng nhỏ hơn, có miền bé hơn

    Vd: Cấp số cộng : a , a+s , a+2s, a+3s , ... , a+ns
    Vậy muốn tính số hạng thứ n : Ta cần biểu diễn số hạng thứ n thông qua số hạng thứ n-1 . Gọi CSC(n) là số hạng thứ n
    Vậy CSC(n) = CSC(n-1) + s (do công thức)
    Và CSC(n) là "thằng anh" , và CSC(n-1) là "Thằng em".

    Khi đệ quy, Cứ giao việc cho thằng em, và tin tưởng là nó làm tốt. Rồi sau đó chỉ việc + với cái s là ra dc thằng anh.
    Và "Thằng anh" muốn làm được, BẮT BUỘC phải dựa vào "thằng em"
    Cứ thế thì ta dễ dàng nhìn ra vấn đề : Thằng này muốn làm phải qua thằng em của nó, rồi thằng em này muốn làm dc phải qua thằng đàn em khác (tay chân cấp dưới) ... vân vân. cho Đến khi 1 thằng đàn em cấp bét làm được việc thì nó bắt đầu bàn giao lại kết quả lên cấp trên ...
    Vậy rõ ràng phải có thằng đàn em cấp nào đó PHẢI LÀM ĐƯỢC VIỆC (cấp bét) thì đó gọi là SUY BIẾN / dừng thuật toán.


    Ví dụ:
    Chủ tịch hội đồng quản trị giao việc cho Giám đốc. Giám đốc giao việc cho phó giám đốc. Phó giám đốc giao việc cho trưởng phòng . Trưởng phòng giao việc cho nhân viên(cấp bét).
    Nhân viên làm ra dc kết quả rồi thì bàn giao theo hướng ngược lại.
    Và chủ tịch hội đồng quản trị có được kết quả cuối cùng
    Đã được chỉnh sửa lần cuối bởi clchicken : 07-03-2012 lúc 06:06 PM.
    Um Mani Padme Hum...!!

  5. #5
    Ngày gia nhập
    12 2011
    Bài viết
    23

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Đã tự sửa dc bài của bản thân thì vận dụng sự hiểu biết của bài đó để hiểu bài ở dưới
    Rất là đơn giản
    Không lý gì tự làm dc 1 bài rồi còn 1 bài tương tự vậy không biết ?
    không phải là mình không hiểu ý bài dưới nhưng bài làm cấp số công đó có thể nói là mình bắt chươc từ bài dưới thôi chứ chính xác cận dừng lại là gì thì mình chưa hiểu rõ,minh chưa hiểu cách hoạt động của hàm đó theo những bước ntn chứ nếu bắt chước mãi thì những bài khó hơn thì chắc không làm đc mat,

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

    Mặc định viết phần tử thứ n của cấp số cộng bằng đệ quy

    Đọc lại đi anh bạn. Tớ vừa edit bài
    Um Mani Padme Hum...!!

  7. #7
    Ngày gia nhập
    12 2011
    Bài viết
    23

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Đọc lại đi anh bạn. Tớ vừa edit bài
    cám ơn bạn,hiểu được rồi~~ sướng quá~~ lát nữa phải nghiên cứu vài bài khác nữa ~ cám ơn nhé

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

  1. Trả lời: 0
    Bài viết cuối: 16-03-2012, 07:05 PM
  2. Bài tập C Viết chương trình khởi tạo giá trị các phần tử là 0 cho mảng một chiều các số nguyên gồm n phần tử.
    Gửi bởi anhtran trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 04-06-2011, 11:36 AM
  3. Viết Giao Diện Phần Mềm bằng Flash, Core viết = C
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 5
    Bài viết cuối: 31-05-2011, 06:45 AM
  4. Phần mềm viết code và chạy c++ trên ubuntu 10 là phần mềm gì?
    Gửi bởi vipnho0209 trong diễn đàn Công cụ, Tài liệu lập trình trên Linux
    Trả lời: 7
    Bài viết cuối: 07-04-2011, 10:49 AM
  5. Viết hàm tính s là tổng các phần tử trước phần tử chẵn cuối cùng của mảng.
    Gửi bởi viettan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 10-01-2011, 03:54 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