遇到这道题两次了,现在来总结下。
方法一:运用组合数学的思想。假设在整个过程中,我有k次走了两步,那么剩下的n-2k次我走的都是一步,那么我总的走的步数是k+n-2k。则结果为从n-k里面选了k次走两步,结果为,代码如下:
public BigDecimal jiecheng(int n){
if(n==0||n==1){
return new BigDecimal(1);
}
else{
BigDecimal temp=jiecheng(n-1);
return temp.multiply(new BigDecimal(n));
}
}
public long GetStepNum2(int n) {
long count=0;
if(n==0){
return 0;
}
for(int i=0;i<=n/2;i++){
BigDecimal temp=jiecheng(n-i);
temp=temp.divide(jiecheng(i));
temp=temp.divide(jiecheng(n-2*i));
count+=temp.longValue();
}
return count;
}
这里一定要注意的是求阶乘