Getting the shortest sequence to reach a number
@CarySwoveland is on the right track.  The original code and several other solutions so far get the wrong answer.  For example, GetMinimumSequence(12) should not return 8, but rather 5, based on the optimal sequence 1, 2, 3, 6, 12.

One straightforward solution uses recursion:

public static int GetMinimumSequence(int n) {
    if (n &lt;= 0) {
        throw new ArgumentOutOfRangeException();
    } else if (n == 1) {
        return 1;
    } else if ((n % 2) == 1) {
        return 1 + GetMinimumSequence(n - 1);
    } else {
        return 1 + Math.Min(GetMinimumSequence(n - 1),
                            GetMinimumSequence(n / 2));
    }
}


Add memoization to that for better performance with larger inputs.  (I'll leave that to you as an exercise.)  In technical terms, this solution uses dynamic programming, since the greedy algorithm leads you astray.