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