求斐波那契数列
1,1,2,3,5,8
第n项 等于前两项的和,即 f(n) = f(n-1) + f(n - 2)
Java程序:
public class Test {
public static void main(String[] args) {
//5.1实现代码: 求斐波那契数列的第 N 项
int ret1 = fib1(40);
int ret = fib(40);
System.out.println("ret1 = " + ret1);
System.out.println("ret = " + ret);
}
//递归求法:当所求的位数较大时(100),递归次数增多,程序运行较慢(有重复计算的项)
public static int fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
return fib(n - 1) + fib(n - 2);
}
//非递归求法:消除重复计算的项
public static int fib1(int n) {
int fast = 1;
int second = 1;
int ret = 0;
for(int i = 3; i <= n; i++) {
ret = fast + second;
fast = second;
second = ret;
}
return ret;
}
}
//1.非递归实现求第n个斐波那契数。
int fib1(int n)
{
int f1=1;
int f2=1;
int f3=0;
int i = 0;
for (i = 0; i <= n;i++)
{
f3 = f2 + f1;
f1 = f2;
f2 = f3;
}
return f3;
}
int main()
{
printf("%d\n",fib1(5));
return 0;
}
//1.递归实现求第n个斐波那契数。
int fib(int n)
{
if (n <= 2)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
//主函数
int main()
{
printf("%d",fib(5));
return 0;
}