Answer before seeing solution

package com.recursion;

import java.util.ArrayList;

public class SubsequenceOfString {

static final ArrayList<String>  result = new ArrayList<>();	
public static void main(String... args) {
	String input= "abcd";
	getSS(input, input.length()-1);
	System.out.println(result);
	System.out.println(result.size());
}

public static ArrayList<String> getSS(String seq, int pointer){
	if(pointer>=0) {
		addToResult(result, 0, ""+seq.charAt(pointer), result.size());
		getSS(seq, pointer-1);
		return result;
	}
	return result;
}

private static ArrayList<String> addToResult(ArrayList<String> result, int index, String character, int initialResultSize){
	if(result.size() == 0) {
		result.add("");
	} 
	if(index==initialResultSize) {
		return result;
	}
	result.add(character + result.get(index));
	addToResult(result, index +1, character,initialResultSize);
	return result;
}

}

This is a working code that I tried before looking at the solution, but slightly modified, want to know your feedback.

Hi @nikhiv6,
It was good thinking… I can see you made a addtoResult function which is called recursively instead of iterative approach which is generally taken … The only risk with recursive calls is to ensure that you do not miss any corner case else the call would go into a infinite loop . If solution works then its great… Nice work