整数の分割を求めるアルゴリズムを考えているのですがわからないのでアドバイスお願いします。

ここでいう整数nの分割とはn=5の場合
5; 4,1; 3,2; 3,1,1; 2,2,1; 2,1,1,1; 1,1,1,1,1 の7つの数字の組のことです。
2次元配列を使った形でお願いします。再帰とか使うんでしょうがいまいちわかりませんでした。

出力は2次元配列の形で代入し、
整数nを入力してください
n=5
No.1: 5         ( a[0][0]=5 )
No.2: 4,1         ( a[1][0]=4, a[1][1]=1 )
・・・
No.7: 1,1,1,1,1     ( a[6][0]=1, a[6][1]=1, ..., a[6][4]=1 )
というふうにしたいです。

/***出力表示部分は以下のように考えました***/

for(i=0; a[i][0] > 0; i++){
printf("No.%d:", i+1);
for(j=0; a[i][j] > 0; j++){
printf("%d,", a[i][j]);
}
printf("\n");
}