代码如下:
3个循环嵌套:
for(int a=0; a<=200;a++)
{
   for(int b=0; a<=200; b++)
      {
        for(int c=0; c<=200; c++)
           {
              row[0]=a;
              row[1]=b;
              row[2]=c;
              //do something
            }
       }
}4个循环嵌套:
for(int a=0; a<=200;a++)
{
   for(int b=0; a<=200; b++)
      {
        for(int c=0; c<=200; c++)
           {
            for(int d=0; d<=200; d++)
              {
                row[0]=a;
                row[1]=b;
                row[2]=c;
                row[3]=d;
                //do something
               }
            }
       }
}由于在运行时并非一定是3个循环的嵌套,可能是20个甚至200个,所以代码不可能像这样写,可能要用递归的方式表达,请问递归如何写?

解决方案 »

  1.   

    public void fun1(int index )
    {
      for(int i=0;i<200;i++)
      {
         row[index]=i;
         if(index <intCounter)  //intCounter  为递归次数
           fun1(index+1);
        else
         dosomthing;
      }
    }
      

  2.   

    public void fun1(int index )
    {
      for(int i=0;i<200;i++)
      {
         row[index]=i;
         if(index <intCounter) 
    {
           fun1(index+1);
    }
        else
    {
        // dosomthing;
    }
      }
    }
      

  3.   

    int startRowIndex = 0;
    void Loop(int n)
    {
      
      if (n >=1)
      {
          for ( int i = 0 ; i < 200 ; i ++)
          {
             row[startRowIndex ++ ] = i;
             Loop(n-1);
          
          }
      }
    }
    }
      

  4.   

    不好意思,写错了
    void Loop(int n, int startRowIndex = 0)
    {
      
      if (n >=1)
      {
          for ( int i = 0 ; i < 200 ; i ++)
          {
             row[startRowIndex] = i;
             Loop(n-1,startRowIndex + 1);
          
          }
      }
    }
      

  5.   

    这个问题是这样的:这个问题我把它在更形象化的描述一下:
    1克西瓜含能量20mg,蛋白质10mg,脂肪5mg
    1克米饭含能量35mg,蛋白质8mg,脂肪6mg
    1克猪肉含能量50mg,蛋白质12mg,脂肪30mg
    1克鸡蛋含能量11mg,蛋白质50mg,脂肪16mg
    1克青菜含能量3mg,蛋白质5mg,脂肪6mg一餐的推荐量能量为800mg,蛋白质为200mg,脂肪为300mg低于或高于这个推荐量都不好,要尽量接近这个推荐量请问西瓜、米饭、猪肉、鸡蛋、青菜的最佳重量是多少?
    算法如何?怎么算?
    我想可能只能用穷举法来得到最佳值了,不过速度慢的受不了
      

  6.   

    用递归还是可以的,不过要预处理一下
    先确定好要算几种食品,然后根据每个食品算该食品的上限,比如说西瓜
    按照能量最大为800/20 =40克
    按照蛋白质最大 200/10 =20克
    按照脂肪最大 300/6=50克
    所以西瓜的最大值为20数组row对应食物类别,max对应该食物的最大值,这样可以得到部分优化
    实际还应该这么做,在每次循环前计算,假如满足条件,那么就不需要继续递归
    先给你递归的方法,后面你再优化吧,呵呵public static void Cal(ref int[] row, int level, ref int[] max)

        if (level < row.Length)
        {
            for (int i = 0; i < max[level]; i++)
            {
                row[level] = i;
                Cal(ref row, level+1, ref max);
            }
        }
        else
        {
            //do somethiing
            Console.Write("\r\n");
            for (int j = 0; j < row.Length; j++)
            {
                Console.Write("\t{0}", row[j]);
            }
        }
    }