construir uma matriz de inteiros para alcançar uma seqüência específica

construir a seqüência mais curta possível de inteiros terminando com A, usando as seguintes regras:

o primeiro elemento da seqüência é 1, cada um dos elementos sucessivos é a soma de quaisquer dois elementos anteriores (adicionar um único elemento a si mesmo também é permitido), cada elemento é maior que todos os elementos anteriores; isto é, a sequência está aumentando.

Por exemplo, para A = 42, uma solução possível é [1, 2, 3, 6, 12, 24, 30, 42]. Outra solução possível é [1, 2, 4, 5, 8, 16, 21, 42].

Eu escrevi o seguinte, mas ele falha na entrada de 456, retornando [1,2,4,8,16,32,64,128,200,256,456], não há números na seqüência que podem ser somados para obter 200.

Como posso corrigir o código abaixo? O que estou fazendo de errado?

  public static int[] hit(int n)
    {
        List<int> nums = new List<int>();

        int x = 1;

        while (x < n)
        {
            nums.Add(x);
            x = x * 2;

            if (x > n)
            {

                    nums.Add(n - (x / 2));

                nums.Add(n);
            }
        }

        nums.Sort();
        int[] arr =  nums.ToArray();
        return arr;
    }

questionAnswers(5)

yourAnswerToTheQuestion