求三重for循环的总共循环次数,代码如下:
两个for循环代码如下:
int n=100;
for(int i =0;i<n;i++)
{
     for(int j=0;j<n-i;j++)
     {
          //doSomeThings.....
     }
}
对于这个两层的循环可以得出它一共做了((n+1)*n)/2次循环。推导过程如下:
i=0时:里层循环做n次;i=1时,里层循环做n-1次;i=2时,里层循环做n-2次……,如此,直到里层循环做3次,2次,1次,或0次。那总循环次数则为:n+(n-1)+(n-2)+……+3+2+1+0.根据等差数列求和知识可以得出结果为:((n+1)*n)/2次。但是,但是,如果是三重循环,或者四层五层的,也有什么公式吗?望高人赐教,并耐心写下推导过程。不胜感激!三个for循环代码如下:
int n=100;
for(int i =0;i<n;i++)
{
     for(int j=0;j<n-i;j++)
     {
          for(int k=0;k<n-i-j;k++)
          {
                //doSomeThings.....
           }
     }
}

解决方案 »

  1.   

    按照你的循环:
    二次循环你也得到:(n+1)*n/2。
    当再加三次循环时就是:
    (n+1)*n/2 + n*(n-1)/2 + (n-1)*(n-2)/2 ++(2+1)*2/2 + (1+1)*1/2;====>
    n+(n-1)+(n-2)+……+3+2+1+0    + 
    (n-1)+(n-2)+……+3+2+1+0      +
    ................              +
    1+0                           =
    n + 2*(n-1) + 3*(n-2) +..............+(n-1)*2 + n*1 + (n+1)*0  =当然现在要看n是奇数 ,还是偶数。
    奇数:2*n + 4*(n-1) + ..............+ ((n+1)/2)*((n+1)/2)
    偶数:2*n + 4*(n-1) + ..............+ 2*(n/2)*(n/2)
      

  2.   


    递归就可以实现:
    // 接收的参数n被调用者传入,然后根据其执行指定次数的for循环。
    void vir(int n) {
        for (int i = 0; i < n; i++) {
            // 接收的n-i在上层n的基础上增加了-i,具体自己分析一下吧!
            vir(n - i);
        }
    }
    有兴趣请加入QQ的JAVA聊天群: http://topic.csdn.net/u/20081211/01/f40f4796-ef52-4bd6-aa56-8adee47c9505.html