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

Đề tài: Truyền dữ liệu kiểu địa chỉ trong hàm quay lui.

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

    Mặc định Truyền dữ liệu kiểu địa chỉ trong hàm quay lui.

    Bài toán kiểm tra giả thuyết của Collatz: với 1 số nguyên dương X, nếu X chẵn ta gán X = X/2 ; nếu X lẻ thì X = X*3+1 thì sau mốt số hữu hạn bước ta sẽ có X = 1.
    Code:
    #include <iostream.h>
    int Collatz(int N)
     {
       if ( N==1 ) return 1 ;
       else
         if (N%2 ==0) return Collatz(N/2) ;
         else
    	 return Collatz(N*3+1) ;
     }
    int main()
     {
       int n ;
       cout<<"\nEnter N = " ;
       cin>>n ;
       cout<<Collatz(n);
       return 0 ;
     }
    Chương trình chạy cho ra kết quả bình thường. Tuy nhiên khi mình muốn thêm 1 biến để tính số bước thực hiện các phép tính đó như sau
    Code:
    #include <iostream.h>
    int Collatz(int N , int &count)
     {
       if ( N==1 ) return 1 ;
       else
         if (N%2 ==0)
    	{
    	  ++count ;
    	  return Collatz(N/2,count) ;
    	}
         else
    	{
    	 ++count ;
    	 return Collatz(N*3+1,count) ;
    	}
     }
    int main()
     {
       int n ;
       int count = 0 ;
       cout<<"\nEnter N = " ;
       cin>>n ;
       cout<<Collatz(n,count)<<endl<<count ;
       return 0 ;
     }
    Biến count trong hàm được truyền dữ liệu theo địa chỉ, tuy nhiên khi chạy chương trình giá trị của count lại không hề thay đổi. Mong mọi người giải thích cho tại sao trong trường hợp này lại như vậy &

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    532

    Trích dẫn Nguyên bản được gửi bởi aMember Xem bài viết
    Bài toán kiểm tra giả thuyết của Collatz: với 1 số nguyên dương X, nếu X chẵn ta gán X = X/2 ; nếu X lẻ thì X = X*3+1 thì sau mốt số hữu hạn bước ta sẽ có X = 1.
    Code:
    #include <iostream.h>
    int Collatz(int N)
     {
       if ( N==1 ) return 1 ;
       else
         if (N%2 ==0) return Collatz(N/2) ;
         else
    	 return Collatz(N*3+1) ;
     }
    int main()
     {
       int n ;
       cout<<"\nEnter N = " ;
       cin>>n ;
       cout<<Collatz(n);
       return 0 ;
     }
    Chương trình chạy cho ra kết quả bình thường. Tuy nhiên khi mình muốn thêm 1 biến để tính số bước thực hiện các phép tính đó như sau
    Code:
    #include <iostream.h>
    int Collatz(int N , int &count)
     {
       if ( N==1 ) return 1 ;
       else
         if (N%2 ==0)
    	{
    	  ++count ;
    	  return Collatz(N/2,count) ;
    	}
         else
    	{
    	 ++count ;
    	 return Collatz(N*3+1,count) ;
    	}
     }
    int main()
     {
       int n ;
       int count = 0 ;
       cout<<"\nEnter N = " ;
       cin>>n ;
       cout<<Collatz(n,count)<<endl<<count ;
       return 0 ;
     }
    Biến count trong hàm được truyền dữ liệu theo địa chỉ, tuy nhiên khi chạy chương trình giá trị của count lại không hề thay đổi. Mong mọi người giải thích cho tại sao trong trường hợp này lại như vậy &
    Có thay đổi đấy.

  3. #3
    Ngày gia nhập
    09 2007
    Bài viết
    724

    làm như này thì đúng nè bạn;

    PHP Code:
    int main()
     {
       
    int n,na ;
       
    int count ;
       
    cout<<"\nEnter N = " ;
       
    cin>>;
       
    na Collatz(n,count);
       
    cout<<na<<"\n"<< count;
       return 
    ;
     } 

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

    à hiểu rồi. Giá trị count thay đổi sau lời gọi hàm Collatz() và cout<<.
    chắc phải viết lại thế này
    Code:
    cout<<Collatz(n,count)<<endl;
    cout<<count ;
    Thật lơ đãng quá. Thank you !

  5. #5
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Tất nhiên phải thay đổi chứ. Bạn thử tham khảo cách viết đoạn code trên như sau (mình chỉ thay đổi lại một chút cho đẹp, vì if mà có return thì không cần else).
    Code:
    int Collatz(int N , int &count)
     {
       ++count ;
       if ( N==1 ) return 1 ;
       if (N%2 ==0)	
             return Collatz(N/2,count) ;
       return Collatz(N*3+1,count) ;	
     }
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

  1. Đồ chơi công nghệ thế kỷ 21:Bút quay,đồng hồ quay,móc quay,máy nghe lén qua sim
    Gửi bởi bigphonevn 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: 06-08-2011, 10:47 PM
  2. Thiết bị thám tử: Bút quay,đồng hồ quay,móc quay,máy nghe lén qua sim
    Gửi bởi bigphonevn 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: 17-07-2011, 08:23 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