微软100题(27)下台阶问题

题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。
 求总共有多少总跳法,并分析算法的时间复杂度。

递归或递推解决

int Taijie(int n)
{
	if(n==1 || n==2) return n;
	int first = 1;
	int second = 2;
	int answer = 0;
	for (int i =2; i<n;i++)
	{
		answer = first +second;
		first = second;
		second = answer;
	}
	return answer;
}


加大难度,如果每次可以走1步,或者2步,或者3步,并要求打印出每一种走法

int take[99];
int num = 0;
void Try(int i, int s)//i代表当前站在第i级台阶,s代表第s步
{
	int j;
	for (j=1;j<=3;++j) //第s步可以走j级台阶
	{
		if(i<j) continue;//剩下的台阶不足j步了
		else 
		{
			take[s] = j;
			if(i==j)//第s步刚好下完台阶了,实现一种方案
			{
				num++;
				for (int k=1;k<=s;++k)
				{
					cout<<take[s]<<" ";
				}
				cout<<endl;
			}
			else //i>j 还可以走
			{
				Try(i-j,s+1);
			}
		}
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值