算法知识视频讲解
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
n<=39
思路:斐波那契可以用递归做,但是容易出现栈溢出,可以把递归改成尾递归的形式;可以用循环做。
//递归
class Solution {
public:
int Fibonacci(int n)
{
if(n==0 || n==1)
return n;
return Fibonacci(n-1)+Fibonacci(n-2);
}
};
//尾递归
class Solution {
public:
int Fibonacci1(int n,int n1=0,int n2=1)
{
if(n==0 || n==1)
return n2;
return Fibonacci1(n-1,n2,n1+n2);
}
int Fibonacci(int n) {
if(n==0 || n==1)
return n;
return Fibonacci1(n);
}
};
//循环
时间复杂度:O(n)
class Solution {
public:
int Fibonacci(int n) {
int t1=0;
int t2=1;
while(n--)
{
t2=t2+t1;
t1=t2-t1;
}
return t1;
}
};
python
python不存在尾递归,没有优化。
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
n0=0
n1=1
for i in range(n):
n1=n0+n1
n0=n1-n0
return n0
# write code here