30/09/2018, 17:07

Lỗi khi cài đặt recursion trong C++

Sáng giờ loay hoay với cái bài này mà em vẫn chưa hiểu là mình sai chỗ nào , mong mọi người giup đỡ

Mục tiêu dùng recursion để kiểm tra xem nếu x<= 100 thì x=x+1 cho tới khi x>100

Code của em

#include <iostream>

using namespace std;

int tong (int x)
{
    if (x<=100)
    {
        x=x+(x+1);
        return x;
        tong(x);
    }
    else
    {
        return x;
    }
}
int main()
{
    int x;
    cin >> x;
    cout << tong (x) << endl;
    return 0;
}
Minh Hoàng viết 19:17 ngày 30/09/2018

x=x+(x+1);
return x;
tong(x);

tại sao lại return trước khi gọi đệ quy nhỉ?

Trung Pham viết 19:07 ngày 30/09/2018

em nghĩ nếu để return sau khi gọi thì máy sẽ bỏ qua luôn để nó lặp lại

nhatlonggunz viết 19:20 ngày 30/09/2018

Hay là anh thử suy nghĩ ngược lại chút xíu.
Kiểu như cho nó bắt đầu tính từ 101, rồi đệ quy nó giảm dần từ từ

Bảo Phan Quốc viết 19:14 ngày 30/09/2018

Trong mã của bạn, return x; được gọi trước khi gọi đệ qui nên dù trường hợp nào hàm cũng sẽ không gọi chính nó được.

Ý tưởng đơn giản là thế này: điều kiện x > 100 là phần neo của đệ qui, khi điều kiện này thỏa thì hàm sẽ trả về giá trị x cho biến đang gọi hàm này, ngược lại, hàm sẽ gọi chính nó với tham số là x + 1, lúc này biến x sẽ được cộng dồn, quá trình này sẽ lặp lại đến khi thỏa điều kiện neo.

#include <stdio.h>
using namespace std;

int tong(int x) {
	if (x > 100) {
		return(x);
	} else {
		return(tong(x + 1));
	}
}

int main() {
	int x, r;
	scanf("%d", &x);
        r = tong(x);
	printf("%d\r\n", r);
	return(0);
}
Tran Huan viết 19:16 ngày 30/09/2018

Bạn nên dùng chức năng debug và theo dõi Call Stack sẽ hiểu rõ hơn về bản chất của việc gọi hàm đệ qui

Bài liên quan
0