斐波那契数列问题优化
一个面试常见问题,一般用以下代码通过递归来实现
public int _Fb(int N) { if (N<=2) { return 1; } else { return _Fb(N - 1) + _Fb(N - 2); } }
通俗易懂,但今天发现递归方法在计算比较大的位数的时候时间复杂度会大幅上升,在Unity中运行超过50甚至会直接卡死
想了另一种通过循环累加的方式进行计算,时间复杂度为N
public void _Fb1(int N) { int n = 0; int n_1 = 1; int n_2 = 1; if (N < 3) { print(1); } else { for (int i = 2; i < N; i++) { n = n_1 + n_2; n_2 = n_1; n_1 = n; } print("Fb1 " + N + " " + n); } }
在计算30位的时候已经在速度上秒杀了递归方法