区切りを作る

n個の要素の列がある。n種類の線分に切り分けることを考える。要素なしの線分が出来てもよい。
n個の要素が作るn-1箇所の間隙と、n個の要素の両端2箇所の合わせてn+1箇所に区切りを入れることが可能で、区切りの数は、n種類の線分の境界であるn-1箇所。n-1箇所の区切りは同じ位置に入れることができる。
そのような区切り方は
n 場合
2 3
3 10
4 35
5 126
6 462
7 1716
8 6435
9 24310
10 92378

public class Runs {
	
	
	public static void Runs_All(int n){
		/*
		 * n-1本の区切りをn+1箇所に入れる。
		 * すべての区切りが同じ箇所に入っても可。
		 */
		int[] kugiri=new int[n-1];
		
		boolean loop=true;
		int count=0;
		
		while(loop){
			
			
			boolean tmpbool=true;
			for(int i=0;i<kugiri.length;i++){
				if(kugiri[i]<n){
					tmpbool=false;
					i=kugiri.length;
				}
			}
			if(tmpbool){
				loop=false;
			}
			count++;
			
			for(int i=0;i<kugiri.length;i++){
				System.out.print(kugiri[i]+"\t");
			}
			System.out.println();
			kugiri=update(kugiri,n);
		}
		System.out.println("count\t"+count);
	}
	
	public static int[] update(int[] a,int max){
		a[0]++;
		for(int i=0;i<a.length-1;i++){
			//System.out.println("i\t"+i+"\tret[i]\t"+a[i]);
				if(a[i]>a[i+1]){
					a[i+1]++;
					if(i==0){
						a[i]=0;
					}else{
						a[i]=a[i-1];
					}
					
					
					
				}
			
			
		}
		
		return a;
	}
	public static double term1(double x, int j,double a){
		double ret=0;
		for(int i=0;i<j;i++){
			ret+=Math.log(x+a*i);
		}
		
		ret = Math.exp(ret);
		return ret;
	}
	public static double factor(int n){
		double ret =0;
		for(int i=1;i<=n;i++){
			ret += Math.log(i);
		}
		ret = Math.exp(ret);
		return ret;
	}
	

}