腾讯面试题--50层阶梯问题

面试题:
台阶问题,一个楼梯有50个台阶,每一步可以走一个台阶,也可以走两个台阶,使用地递归算法,计算共有多少种不同的走法

/**
 * TX面试题
 * <p>
 * create by SJP
 * 2018/1/1
 */
public class Stage {
    private static final int floor = 50; // 50层阶梯

    public static void main(String[] args) {
        int count = 0; // 计数方法
        int one = 0; // 爬一层的步数
        count = stepByOne(one, count); // 开始递归
        System.out.println("总的方法种数:" + count);
    }

    public static int stepByOne(int one, int count) {
        if (one > floor) { // 当one是50的时候仍需在递归一次
            return count;
        } else {
            int fnum = 0; // 初始当前计数总楼层
            fnum = one;// 根据走一步的层数,计算当前总楼层,
            fnum = stepByTwo(fnum); // 开始递归走2层的步数
            if (fnum == floor) { // 如果结果数字等于50层则递归结果符合
                count++; // 方法总数++
                System.out.println("爬一层的步数:" + one + " 爬2层的步数" + (floor - one) / 2);
            }
            one++;
            return stepByOne(one, count);
        }
    }

    public static int stepByTwo(int fnum) { // 爬一步数字 当前楼层
        if (fnum >= floor) {
            return fnum;
        } else {
            fnum = fnum + 2; //每次加上一个2 ,即爬两层
            return stepByTwo(fnum);
        }
    }

}

2018年第一个算法问题,感觉2个递归方法不是最完美的方法,希望在以后的学习当中,再次改进,如果大家有更好的方法,我们一起交流!
留下我的个人兴趣网页(瞎搞点的玩意^o^),多多关照!
www.foryou.ink

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值