递归、递归算法的非递归优化
2019年07月10日 09:58:01 最后一滴血的Lanbo 阅读数 20
就以斐波那契数列为例,当时面试时问到了,很简单的题,问转化为非递归如何做,居然一时紧张没回答上来,太丢人了
using System;
namespace 练习
{
class test
{
//斐波那契数列:1 1 2 3 5 8 13 21 34...
//递归
public int f(int n)
{
if (n == 1 || n == 2)
return 1;
else
return f(n - 2) + f(n - 1);
}
//非递归
public int f1(int n)
{
if (n == 1 || n == 2)
return 1;
else
{
int x = 2;
int x1, x2;//保存x的前两个数,相比系统中递归方法用栈保存肯定会快很多
x1 = x2 = 1;
for (int i = 3; i <= n; i++)
{
x = x1 + x2;
x1 = x2;
x2 = x;
}
return x;
}
}
}
class 斐波那契递归与非递归
{
public static void Main(String[] Args)
{
test t=new test();
for (int i = 1; i <= 10; i++)
//Console.Write(t.f1(i) + " ");
Console.Write(t.f1(i) + " ");
Console.WriteLine();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52