Write a recursive solution to solve the Partition problem Pa
Solution
// C code to determine if there exist a subset such that sum of elemnets of subset is half of sum of total set
 #include <stdio.h>
 #include <stdbool.h>
bool partitionSum(int array[], int size, int subsetSum)
 {
   
 int i,j;
 // result[i][j] = 1 if there is a array[0..j-1] with sum = i
 bool result[subsetSum+1][size+1];
// If subsetSum is 0, then answer is 1
 for (i = 0; i <= size; i++) result[0][i] = 1;
// If subsetSum is not 0 and array is empty, then answer is 0
 for (i = 1; i <= subsetSum; i++)
 result[i][0] = 0;
// filling the result table
 for (i = 1; i <= subsetSum; i++)
 {
 for (j = 1; j <= size; j++)
 {
 result[i][j] = result[i][j-1];
 if (i >= array[j-1])
 result[i][j] = result[i][j] || result[i - array[j-1]][j-1];
 }
 }
// return the value of subsetSum,size in result table
 return result[subsetSum][size];
 }
int main()
 {
 int i,sum = 0;
int array1[] = {5, 10, 6, 8, 1};
 int n = sizeof(array1)/sizeof(array1[0]);
   
 for (i = 0; i < n; ++i)
 {
 sum = sum + array1[i];
 }
   
 int subsetSum = sum/2;
   
 if (partitionSum(array1, n, subsetSum) == 1)
 printf(\"Yes, Subset exist\ \");
 else
 printf(\"Subset does not exist\ \");
 // output: Yes, Subset exist
sum = 0;
int array2[] = {1, 5, 7, 34, 76, 54, 23, 19, 22, 81, 44, 77, 29, 40, 11, 42, 43, 31, 57, 61};
 n = sizeof(array2)/sizeof(array2[0]);
   
 for (i = 0; i < n; ++i)
 {
 sum = sum + array2[i];
 }
   
 subsetSum = sum/2;
if (partitionSum(array2, n, subsetSum) == 1)
 printf(\"Yes, Subset exist\ \");
 else
 printf(\"Subset does not exist\ \");
 // output: Yes, Subset exist
return 0;
}


