Thắc mắc vì sao biến không thay đổi và đệ quy

Đề: Cho một mảng, kiểm tra có dãy con không liên tiếp nào bằng giá trị k không

  1. Vì sao em thay đổi giá trị 2 biến cnt và dem trong hàm bool thì nó vẫn bằng 0.
  2. Dòng này là nó thực hiện cả hai cái đúng không ạ lỡ lúc cái bên trái đúng còn cái bên phải sai thì hàm mẹ lấy cái nào ạ.
return subsetsum(arr,k,n-1) || subsetsum(arr,k-arr[n-1], n-1);

Mọi người giải thích giúp em với ạ, em cảm ơn nhiều :sunny:

Đây là code của e:

#include <iostream>
using namespace std; 
#include <vector>  
int cnt = 0;
int dem = 0; 
bool subsetsum (vector <int> arr, int k, int n) {
	dem++; 
	if (k==0&&cnt!=0) return true;
	if (n==0) return false;
	cnt++; 
		if (arr[n-1] > k) return subsetsum(arr,k,n-1); 
	return subsetsum(arr,k,n-1) || subsetsum(arr,k-arr[n-1], n-1); 
}
int main () { 
   int n; 
   cin >> n; 
   vector <int> arr (n); 
      int k; 
   cin >> k; 
   for (int i =0; i < n;i++) {   
       cin >> arr[i]; 
    }
    cout << cnt << " " << dem << endl; 
   if (subsetsum (arr,k,n) == true) cout << "Co"; 
   else cout << "Khong";  
   return 0;  
}

Phép &&|| đều đi từ trái sang phải:

  • && thì false là dừng vì cả hai đều đúng mới true
  • || thì true là dừng vì cả hai đều sai mới false
5 Likes

Dạ vâng em cảm ơn nhiều ạ :smiley_cat:

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