I am trying to write a program to solve a problem which states as follows "Print all possible distinct perfect squares whose sum is equal to the square of given number". For example -
Input
11
Output
1 4 16 36 64
1 4 16 100
4 36 81
I tried basic recursive approach and my code passed for small input. When I try for bigger number like 116 it runs forever. My JAVA code
public class SumOfPerfectSquare {
public static void main(String args[]){
generateSum(11);
}
private static void generateSum(int num) {
int arr[] = new int[num];
for(int i=1; i<num; i++){
arr[i] = i*i;
}
findSum(arr, num*num, 1, 0, "");
}
private static void findSum(int arr[], int desiredSqr, int pointer, int currentSum, String sumStr) {
if(pointer == arr.length || currentSum >= desiredSqr){
if(currentSum == desiredSqr){
System.out.println(sumStr);
}
return;
}
for(int i=pointer; i<arr.length; i++){
findSum(arr, desiredSqr, i+1, currentSum+arr[i], sumStr+arr[i]+" ");
}
}
}
Please let me know if there is a better way to solve this (less time complexity)