青蛙跳台阶

int numWays(int n)//青蛙跳台阶,递归方法,时间复杂度高
{
	int x, y;
	if (n > 2)
	{
		x = numWays(n - 1);
		y = numWays(n - 2);
		return x + y;
	}
	else if (0 < n && n <= 2)
	{
		return n;
	}
	else if (n == 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int heigh;
	scanf_s("%d", &heigh);
	printf("%d",numWays(heigh)% 1000000007);
	return 0;
}

今天学了递归方法,用递归去做了剑指offer里的一个经典题,但是递归做的话,时间复杂度很高,结果出来的很慢。我看了一些解析发现这是一个斐波那契数列,是斐波那契数列就好办了,直接一个循环就出来了。(为什么是斐波那契数列?列一下答案就知道了,不同阶的跳法种类,1 1 2 3 5 8 13.......)。

int numWays(int n)//青蛙跳台阶,循环方法,时间复杂度低
{
	int a=1, b=1, c=1;
	while (n>1)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

感觉递归对思维要求还是挺高的QAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值