30/09/2018, 16:45

về biến trong hàm đệ quy

nếu mình giữ comment thì chương trình chạy đúng, bỏ đi thì sai. biến string đã làm gì count
p/s: chương trình tính độ dài chuỗi theo đệ quy

#include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;

int countChar(int count)
{
	char a = getche();
	//string name = a + name;
	if (a == 13)
	{
		cout << endl;
		return count;
	}
		else countChar(count + 1);
}

int main()
{
	cout << "Enter string: " << endl;
	int length = countChar(0);
	cout << "Length of string: " << length;
	return 0;
}
Nguyễn Minh Dũng viết 19:01 ngày 30/09/2018

Cái này không liên quan gì đến đệ quy cả. Viết dòng này ở đâu cũng lỗi.

string name = a + name;

Ở đây bạn sử dụng biến name mà chưa gán giá cho nó.

Vu Tien Thanh viết 18:56 ngày 30/09/2018

em đã sửa lại và gán giá trị cho string nhưng chương trình vẫn chạy sai, quan trọng em muốn hỏi là biến count(biến đếm ký tự) tại sao lại không đếm đúng nữa khi thêm bỏ comment. nó cho ra 1 kết quả rất to tới cả chục nghìn, mặc dù dòng comment không hề tác động đến biến count. có gì sai sót, mong anh giải đáp

Nguyễn Minh Dũng viết 19:00 ngày 30/09/2018

Cho anh xem code mới thử xem

Vu Tien Thanh viết 18:50 ngày 30/09/2018
#include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;

int countChar(int count)
{
	char a = getche();
	string name=" ";
	name = a + name;
	if (a == 13)
	{
		cout<<endl;
		return count;
	}
		else countChar(count + 1);
}

int main()
{
	cout << "Enter string: " << endl;
	int length = countChar(0);
	cout << "Length of string: " << length;
	return 0;
}

như em nói ở trên, nếu bỏ string đi(dòng 9 và 10 thành comment) thì chương trình chạy đúng(biến count đếm đúng), thêm string vào, theo em thì nó không ảnh hưởng gì đến biến count và chương trình nhưng tại sao count lại cho ra 1 kết quả rất to(sai)

Vu Tien Thanh viết 18:50 ngày 30/09/2018

chương trình này sẽ chạy đúng khi dòng 9 và 10 thành comment

#include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;

int countChar(int count)
{
	char a = getche();
	//string name=" ";
	//name = a + name;
	if (a == 13)
	{
		cout<<endl;
		return count;
	}
		else countChar(count + 1);
}

int main()
{
	cout << "Enter string: " << endl;
	int length = countChar(0);
	cout << "Length of string: " << length;
	return 0;
}

mong anh giải đáp

Gió viết 18:49 ngày 30/09/2018
else countChar(count + 1);

=>

   else return countChar(count+1);

Lỗi là do đệ quy ở else bạn không trả về kết quả nên nó lấy giá trị rác. Có thể giá trị trả về là ở trong thanh ghi sót lại

Bài liên quan
0