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

Đề tài: Nhập ma trận bằng đệ quy ?

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    27

    Mặc định Nhập ma trận bằng đệ quy ?

    Với mảng 1 chiều thì em đã làm được như sau
    PHP Code:
    void InputArray (int *int n)
    {
        if ( 
    <= )    
            return;    
        
    InputArray (an-1);
        
    printf ("\na[%d]= "1);
        
    scanf ("%d", & a[1]);

    Nhưng với mảng 2 chiều ( ma trận ) thì em không biết cách nào để làm . Mong nhận được sự giúp đỡ của các anh chị .

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Try this
    C Code:
    1. #include <iostream>
    2. #include <cstdio>
    3.  
    4. const int COL = 3;
    5. const int ROW = 3;
    6.  
    7. void read_matrix(int matrix[][COL], int row){
    8.   if(row == ROW){
    9.     return;
    10.   }
    11.   else{
    12.     for(int col = 0; col < COL; ++col){
    13.       printf("[%d][%d]", row, col);
    14.       scanf("%d", &matrix[row][col]);
    15.       printf("\n");
    16.     }
    17.     read_matrix(matrix, row + 1);
    18.   }
    19. }
    20.  
    21. void show_matrix(int matrix[][COL]){
    22.   for(int x = 0; x < ROW; ++x){
    23.     for(int y = 0; y < COL; ++y){
    24.       printf("%d  ", matrix[x][y]);
    25.     }
    26.     printf("\n");
    27.   }
    28. }
    29.  
    30. int main(){
    31.   int matrix[ROW][COL];
    32.   read_matrix(matrix, 0);
    33.   show_matrix(matrix);
    34.   return 0;
    35. }

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    27

    Code:
    void read_matrix(int matrix[][COL], int row){
      if(row == ROW){
        return;
      }
      else{
        for(int col = 0; col < COL; ++col){
          printf("[%d][%d]", row, col);
          scanf("%d", &matrix[row][col]);
          printf("\n");
        }
        read_matrix(matrix, row + 1);
      }
    }
    Em thường biết dùng đệ quy là để hoá giải 1 vòng for
    Nhập ma trận thì có 2 vòng for <-> với 2 lần gọi lại hàm chính nó .
    Cách ở trên của anh chỉ hoá giải 1 vòng for
    Vậy anh còn cách nào khác để không dùng vòng for không ?
    Thanks anh nha !

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    27

    read_matrix(matrix, 0);
    Cái này em thấy không hợp lý lắm . Với bài này thì kết quả thì ok . Nhưng người ta thường nhập vào là số hàng và số cột cho ma trận.
    Như em nghĩ thì nên khai báo hàm là :

    void read_matrix(int matrix[][COL], int row, int column)
    và trong hàm main sẽ là read_matrix(matrix, row, column);

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

    Tại sao phải vất vả như vậy nhỉ ? Nhập ma trận bằng đệ quy hay bình thường thì có sao đâu chứ ? Có tốt hơn không ?

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    27

    Mặc định Nhập ma trận bằng đệ quy ?

    Trích dẫn Nguyên bản được gửi bởi sieuphuong Xem bài viết
    Tại sao phải vất vả như vậy nhỉ ? Nhập ma trận bằng đệ quy hay bình thường thì có sao đâu chứ ? Có tốt hơn không ?
    Nếu viết bình thường thì simple rồi nhưng nhìn dưới góc độ đệ quy thì em nhìn không được nên mới post lên đây nhờ anh chị giải đáp .

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi tun_tun Xem bài viết
    Nếu viết bình thường thì simple rồi nhưng nhìn dưới góc độ đệ quy thì em nhìn không được nên mới post lên đây nhờ anh chị giải đáp .
    Bạn nên cẩn thận với việc sử dụng đệ quy.
    Một cách hay nhất là chạy tay với giải thuật của mình.
    Không biết ghi gì luôn ...

  8. #8
    Ngày gia nhập
    04 2008
    Bài viết
    27

    Trích dẫn Nguyên bản được gửi bởi Forlorn_hope Xem bài viết
    Bạn nên cẩn thận với việc sử dụng đệ quy.
    Một cách hay nhất là chạy tay với giải thuật của mình.
    Anh có thể giải đáp bài trên giùm em ko ?

  9. #9
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Bài trên có thể là R2 muốn ví dụ minh họa cho cậu thấy thôi. Tại sao Tun Tun không thử viết xem sao ? Như thế cậu sẽ nhanh hiểu hơn.

    Bài trên của Tun Tun cũng không khó lắm, nếu làm theo kiểu của tun tun thì cũng được
    PHP Code:
    void read_matrix(int matrix[][COL], int rowint column
    tuy nhiên, cách giải thích này :
    PHP Code:
    Em thường biết dùng đệ quy là để hoá giải 1 vòng for 
    không hẳn là đúng đâu nhé. Thường thì người ta thấy như thế thôi.

    Theo cách của tun tun :
    PHP Code:
    void inputMatrix(int **a,int i,int j,int n,int m)
    {
       if(
    == n) return;
       if(
    == n)
       {
          ++
    i;j=0;
          
    inputMatrix(a,i,j,n,m);
       }
       
    printf("A[%d][%d] = ",i,j) ; scanf("%d",&A[i][j]);
       
    inputMatrix(a,i,++j,n,m);

    Hi vọng cậu hiểu !

  10. #10
    Ngày gia nhập
    04 2008
    Bài viết
    27

    Code:
    void inputMatrix(int **a,int i,int j,int n,int m)
    {
       if(i == n) return;
       if(j == n)
       {
          ++i;j=0;
          inputMatrix(a,i,j,n,m);
       }
       printf("A[%d][%d] = ",i,j) ; scanf("%d",&A[i][j]);
       inputMatrix(a,i,++j,n,m);
    }
    Hix . 2 biến n , m là như thế nào anh. n = i và m = j hả anh ?
    Mà hàm ma trận vào truyền vào thêm 2 tham số n ,m nữa vậy anh.
    Không cần có làm được không anh ?

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

  1. Tin tuổi trẻ - cập nhật thông tin giới trẻ hot và nóng
    Gửi bởi apolo1512 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 13-12-2013, 10:15 AM
  2. căn hộ N05 trần duy hưng, chung cư N05 trần duy hưng, chênh thấp nhất thị trường
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 13-01-2012, 10:36 AM
  3. Thảo luận về thuật toán tìm đường đi ngắn nhất (có chi phí ít nhất) trên ma trận
    Gửi bởi hunterphu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 10-08-2010, 12:05 AM
  4. website cập nhật nhiều laptop mới và hot nhất, bán trả góp thủ tục đơn giản
    Gửi bởi diemnt trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 02-07-2010, 03:23 PM

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