title: Sum of K elements in array that equates to N
body: <p>Given an array say nums = { 1,2,5,3,6,-1,-2,10,11,12}, using max no of elements (say maxNums=3)
  find the elements whose sum (say sum =10) = K</p>
  
  <p>so if maxNums to be used = 3 
      sum to find = 10
  the the answer is </p>
  
  <pre><code>    {1  3  6}    
      {1  -1  10}
      {1  -2  11}
      {2  5  3}
      {2  -2  10}
      {5 6 -1}
      {-1  11}
      {-2  12}
      {10}
  </code></pre>
  
  <p>I wrote a recursive function which does the job. <strong>How do I do it without recursion?</strong>
  and/or with less memory ?</p>
  
  <pre><code>class Program
  {
          static Int32[] nums = { 1,2,5,3,6,-1,-2,10,11,12};
          static Int32 sum = 10;
          static Int32 maxNums = 3;
  
  
          static void Main(string[] args)
          {
  
              Int32[] arr = new Int32[nums.Length];
              CurrentSum(0, 0, 0, arr);
  
              Console.ReadLine();
          }
  
          public static void Print(Int32[] arr)
          {
              for (Int32 i = 0; i &lt; arr.Length; i++)
              {
                  if (arr[i] != 0)
                      Console.Write("  "   +arr[i]);
              }
              Console.WriteLine();
          }
  
  
          public static void CurrentSum(Int32 sumSoFar, Int32 numsUsed, Int32 startIndex, Int32[] selectedNums)
          {
              if ( startIndex &gt;= nums.Length  || numsUsed &gt; maxNums)
              {
                  if (sumSoFar == sum &amp;&amp; numsUsed &lt;= maxNums)
                  {
                      Print(selectedNums);
                  }                    
                  return;
              }
  
                         **//Include the next number and check the sum**
                      selectedNums[startIndex] = nums[startIndex];
                      CurrentSum(sumSoFar + nums[startIndex], numsUsed+1, startIndex+1, selectedNums);
  
                      **//Dont include the next number**
                      selectedNums[startIndex] = 0;
                      CurrentSum(sumSoFar , numsUsed , startIndex + 1, selectedNums);
          }
      }
  </code></pre>