Cần góp ý code bài tập đệ quy tìm vị trí đầu tiên của 1 số x trong mảng 1 chiều

Em đang học cách viết chương trình đệ quy(trước đây tụi em có học qua rồi nhưng dùng vòng for) với đề bài:
Viết chương trình tìm vị trí đầu tiên của phần tử x trong mảng 1 chiều a(với x nhập vào từ bàn phím).
Đây là code của em mọi người xem có thể rút gọn hay có điểm gì thừa hay thiếu không xin chỉ bảo để em rút kinh nghiệm ạ:

 # include  < iostream>
 # include  < conio.h>

using namespace std;

 int TimXDauTienNP(int a[], int x, int SoPhanTu,int ViTri);

int main()
{

	int x, i = 0;
	int a[5] = { 1, 2, 3, 2, 4 };
	cout << "\nX= ";
	cin >> x;
	//Xuat mang
	for (i; i < 5; i++)
		cout << a[i] << "\t";
	int kq=TimXDauTienNP(a, x, 5,0);
	if (kq == -1)
		cout << "\nKhong co phan tu nay trong mang\n";
	else
		cout << "\nVi tri phan tu " << x << " trong mang la: " << kq<<endl;
	int kq2 = TimXDauTienNP(a, x, 5, 4);
	_getch();
	return 1;
}

int TimXDauTienNP(int a[], int x, int SoPhanTu, int Vitri)
{
	
	if (SoPhanTu < 0)
		return -1;
	if (x != a[Vitri])
	{
		return TimXDauTienNP(a, x, SoPhanTu - 1,Vitri+1);
	}	
	else
	{
		return Vitri;
	}
		
}

Code của bạn vẫn tìm khi sophantu=0. Nếu arr[n]=x thì nó sẽ trả về địa chỉ = n (là kết quả sai).

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