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;
}

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

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

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

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ừ

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);
}

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?