Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: sử dụng hàm trong đệ quy

  1. #1
    Ngày gia nhập
    02 2012
    Bài viết
    0

    Mặc định sử dụng hàm trong đệ quy

    Code:
     các bạn ơi ai có thể giúp mình , mấy bài sử dụng đệ quy ko ,
     trong mấy bài đệ quy  thì trong đệ quy phi tuyến thì mình sử dụng đc 
    nhưng còn nhị phân và phi tuyến mình ko sử dụng đc 
    vi trong hàm trả lại nhiều return quá vd như bài kiểm tra số hoàn hảo 
    #include<iostream.h>
    #include<conio.h>
    
    int kiemtra(int n,int i) 
        { 
        if (i==n) return 0; 
        else 
            if (n%i==0) 
                return i + kiemtra(n,i+1); 
            else 
                return kiemtra(n,i+1);     
    }  
    main()
    {
    int i,n;
    cout<<"nhap vào 1 số:";
    cin>>n;
    for(i=0;i<n;i++)
    {
    if(kiemtra(n,i)==0)
    {
    cout<<"khong phai so hoan hao";
    break;
    }
    else
    {
    cout<<"la so hoan hao:";
    break;
    }
    }
    getch();
    }
     
    
    cái code này sai chỗ nào thế mà mình chạy ko dc , chắc có lẽ mình ko biết sử dụng hàm đệ quy hic ,
     ai giúp đỡ mình ty:D

  2. #2
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    Trích dẫn Nguyên bản được gửi bởi hauyen Xem bài viết
    Code:
     các bạn ơi ai có thể giúp mình , mấy bài sử dụng đệ quy ko ,
     trong mấy bài đệ quy  thì trong đệ quy phi tuyến thì mình sử dụng đc 
    nhưng còn nhị phân và phi tuyến mình ko sử dụng đc 
    vi trong hàm trả lại nhiều return quá vd như bài kiểm tra số hoàn hảo 
    #include<iostream.h>
    #include<conio.h>
    
    int kiemtra(int n,int i) 
        { 
        if (i==n) return 0; 
        else 
            if (n%i==0) 
                return i + kiemtra(n,i+1); 
            else 
                return kiemtra(n,i+1);     
    }  
    main()
    {
    int i,n;
    cout<<"nhap vào 1 số:";
    cin>>n;
    for(i=0;i<n;i++)
    {
    if(kiemtra(n,i)==0)
    {
    cout<<"khong phai so hoan hao";
    break;
    }
    else
    {
    cout<<"la so hoan hao:";
    break;
    }
    }
    getch();
    }
     
    
    cái code này sai chỗ nào thế mà mình chạy ko dc , chắc có lẽ mình ko biết sử dụng hàm đệ quy hic ,
     ai giúp đỡ mình ty:D
    bạn nhìn thử xem khi i = 0 rồi nhìn lại cái hàm kiểm tra...
    làm sao 1 số chia dư cho 0 đc
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

  3. #3
    Ngày gia nhập
    12 2011
    Nơi ở
    TP HCM
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi hauyen Xem bài viết
    Code:
     các bạn ơi ai có thể giúp mình , mấy bài sử dụng đệ quy ko ,
     trong mấy bài đệ quy  thì trong đệ quy phi tuyến thì mình sử dụng đc 
    nhưng còn nhị phân và phi tuyến mình ko sử dụng đc 
    vi trong hàm trả lại nhiều return quá vd như bài kiểm tra số hoàn hảo 
    #include<iostream.h>
    #include<conio.h>
    
    int kiemtra(int n,int i) 
        { 
        if (i==n) return 0; 
        else 
            if (n%i==0) 
                return i + kiemtra(n,i+1); 
            else 
                return kiemtra(n,i+1);     
    }  
    main()
    {
    int i,n;
    cout<<"nhap vào 1 số:";
    cin>>n;
    for(i=0;i<n;i++)
    {
    if(kiemtra(n,i)==0)
    {
    cout<<"khong phai so hoan hao";
    break;
    }
    else
    {
    cout<<"la so hoan hao:";
    break;
    }
    }
    getch();
    }
     
    
    cái code này sai chỗ nào thế mà mình chạy ko dc , chắc có lẽ mình ko biết sử dụng hàm đệ quy hic ,
     ai giúp đỡ mình ty:D
    Quan tâm chỗ mình bôi đỏ trước bạn nhé.
    Mình rất muốn cùng nhau trao đổi học hỏi với các tất cả các bạn dù bạn mới nhập môn hay đã thành "sư phụ".....(mình nhập môn thôi=)))
    Cùng học tập nhé....nick:cauberong_09.

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

    hàm đệ quy tốt rồi đáng lẽ ko xét tuy nhiên tuy nhiên vấn đề là ở chỗ chủ topic chưa hiểu rõ cái giá trị ma` hàm đẹ quy nó trả về lên dẫn tới dùng vòng for với if hơi sai chút...
    C Code:
    1.  
    2.  
    3. int kiemtra(int n,int i) -> hàm này thực chất trả về kết quả tổng các ước nhỏ hơn n
    4.     {
    5.     if (i==n) return 0; //đk này là điểm dừng của hàm đệ quy chứ ko phải kết quả cuối cùng trả về của hàm
    6.     else
    7.         if (n%i==0)
    8.             return i + kiemtra(n,i+1);
    9.         else
    10.             return kiemtra(n,i+1);    
    11. }

    và giờ ta đi xét hàm main
    C Code:
    1.  
    2. for(i=0;i<n;i++) // vòng lặp này là ko cần thiết vì chỉ cần chạy i đầu tiên+ lệnh break là out ngay
    3. {
    4. if(kiemtra(n,i)==0) // ngoài i==n ra thì hàm luôn trả về kết quả !=0 do đó nó luôn in ra số nào cũng hoàn hảo cả
    5. .....
    6. }
    sửa lại :

    C Code:
    1. // bỏ vòng lặp for đi
    2. if(kiemtra(n,1)==n)
    3. cout<<"la so hoan hao";
    4. else
    5. cout<<"khong phai so hoan hao";

  5. #5
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    Trích dẫn Nguyên bản được gửi bởi Momoka Xem bài viết
    hàm đệ quy tốt rồi đáng lẽ ko xét tuy nhiên tuy nhiên vấn đề là ở chỗ chủ topic chưa hiểu rõ cái giá trị ma` hàm đẹ quy nó trả về lên dẫn tới dùng vòng for với if hơi sai chút...
    C Code:
    1.  
    2.  
    3. int kiemtra(int n,int i) -> hàm này thực chất trả về kết quả tổng các ước nhỏ hơn n
    4.     {
    5.     if (i==n) return 0; //đk này là điểm dừng của hàm đệ quy chứ ko phải kết quả cuối cùng trả về của hàm
    6.     else
    7.         if (n%i==0)
    8.             return i + kiemtra(n,i+1);
    9.         else
    10.             return kiemtra(n,i+1);    
    11. }

    và giờ ta đi xét hàm main
    C Code:
    1.  
    2. for(i=0;i<n;i++) // vòng lặp này là ko cần thiết vì chỉ cần chạy i đầu tiên+ lệnh break là out ngay
    3. {
    4. if(kiemtra(n,i)==0) // ngoài i==n ra thì hàm luôn trả về kết quả !=0 do đó nó luôn in ra số nào cũng hoàn hảo cả
    5. .....
    6. }
    sửa lại :

    C Code:
    1. // bỏ vòng lặp for đi
    2. if(kiemtra(n,1)==n)
    3. cout<<"la so hoan hao";
    4. else
    5. cout<<"khong phai so hoan hao";
    bạn ấy chắc muốn kiểm tra từ 1 tới n xem số mấy là số hoàn hảo
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

  6. #6
    Ngày gia nhập
    02 2012
    Bài viết
    0

    Mặc định sử dụng hàm trong đệ quy

    Code:
    mình làm như bạn rồi mà thấy in sai , mình đã bỏ vòng lặp ra rồi mà vẫn sai
    làm sao vậy bạn

  7. #7
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    Trích dẫn Nguyên bản được gửi bởi hauyen Xem bài viết
    Code:
    mình làm như bạn rồi mà thấy in sai , mình đã bỏ vòng lặp ra rồi mà vẫn sai
    làm sao vậy bạn
    Bạn post toàn bộ code sau khi sữa đổi của bạn lên xem...
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

  8. #8
    Ngày gia nhập
    02 2012
    Bài viết
    0

    Code:
     
    code của mình mới làm nè
    #include<iostream.h>
    #include<conio.h>
    
    int kiemtra(int n,int i) 
        { 
        if (i==n) return 0; 
        else 
            if (n%i==0) 
                return i + kiemtra(n,i+1); 
            else 
                return kiemtra(n,i+1);     
    }  
    main()
    {
    int i,n;
    cout<<"nhap vào 1 số:";
    cin>>n;
    if(kiemtra(n,1)==n)
     cout<<"la so hoan hao";
      else
      cout<<"khong phai so hoan hao";
      getch();
    }

  9. #9
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    Trích dẫn Nguyên bản được gửi bởi hauyen Xem bài viết
    Code:
     
    code của mình mới làm nè
    #include<iostream.h>
    #include<conio.h>
    
    int kiemtra(int n,int i) 
        { 
        if (i==n) return 0; 
        else 
            if (n%i==0) 
                return i + kiemtra(n,i+1); 
            else 
                return kiemtra(n,i+1);     
    }  
    main()
    {
    int i,n;
    cout<<"nhap vào 1 số:";
    cin>>n;
    if(kiemtra(n,1)==n)
     cout<<"la so hoan hao";
      else
      cout<<"khong phai so hoan hao";
      getch();
    }
    Mình thấy đâu có sai...bạn thấy nó sai ở đâu


    C++ Code:
    1. #include<iostream>
    2. #include<conio.h>
    3.  
    4. using namespace std;
    5.  
    6. int kiemtra(int n,int i)
    7. {
    8.     if (i==n) return 0;
    9.     else if (n % i==0)
    10.         return i + kiemtra(n,i+1);
    11.         else
    12.             return kiemtra(n,i+1);    
    13. }  
    14. main()
    15. {
    16.     int i,n;
    17.     cout<<"nhap vao 1 so:";
    18.     cin>>n;
    19.     if(kiemtra(n,1)==n)
    20.         cout<<"la so hoan hao";
    21.         else
    22.             cout<<"khong phai so hoan hao";
    23.     getch();
    24. }
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

  10. #10
    Ngày gia nhập
    02 2012
    Bài viết
    0

    Code:
     bạn nhập 8 thử có đúng ko..?

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