public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GoStair gs = new GoStair(6);
gs.backtrack(0);
}
}
class GoStair{
int n;
int s[];
GoStair(int m){
n=m;
s=new int[n];
}
void backtrack(int t){
if(sum(t)>=n){//判断第t个节点前的总和是否大于等于楼梯总数
if(sum(t)==n){//相等
for(int i=0;i<t;i++)
//if(s[i]>0)
System.out.print(s[i]+" ");
}
System.out.println();
}else{
for(int i=1;i<=2;i++)
if(sum(t)+i<=n)//如果第t个节点前的总和+i小于等于楼梯总数,说明第t个节点可以等于i
{s[t]=i;
// if(sum(t+1)<n)
backtrack(t+1);
}
}
}
//求第k个节点前所总的楼梯总数
private int sum(int k){
int temp=0;
for(int i=0;i<k;i++)
temp+=s[i];
return temp;
}
}