@@ -38,7 +38,11 @@ F(N) = F(N - 1) + F(N - 2), 其中 N > 1.</pre>
38
38
39
39
## 解法
40
40
41
- 递推求解。
41
+ ** 方法一:递推**
42
+
43
+ 我们定义初始项 $a=0$, $b=1$,接下来执行 $n$ 次循环,每次循环中,计算 $c=a+b$,并更新 $a=b$, $b=c$,循环 $n$ 次后,答案即为 $a$。
44
+
45
+ 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为输入的整数。
42
46
43
47
<!-- tabs:start -->
44
48
@@ -49,8 +53,8 @@ class Solution:
49
53
def fib (self , n : int ) -> int :
50
54
a, b = 0 , 1
51
55
for _ in range (n):
52
- a, b = b, a + b
53
- return a % 1000000007
56
+ a, b = b, ( a + b) % 1000000007
57
+ return a
54
58
```
55
59
56
60
### ** Java**
@@ -59,7 +63,7 @@ class Solution:
59
63
class Solution {
60
64
public int fib (int n ) {
61
65
int a = 0 , b = 1 ;
62
- for ( int i = 0 ; i < n; ++ i ) {
66
+ while (n -- > 0 ) {
63
67
int c = (a + b) % 1000000007 ;
64
68
a = b;
65
69
b = c;
@@ -76,7 +80,7 @@ class Solution {
76
80
public:
77
81
int fib(int n) {
78
82
int a = 0, b = 1;
79
- for (int i = 0; i < n; ++i ) {
83
+ while (n-- ) {
80
84
int c = (a + b) % 1000000007;
81
85
a = b;
82
86
b = c;
@@ -86,6 +90,18 @@ public:
86
90
};
87
91
```
88
92
93
+ ### **Go**
94
+
95
+ ```go
96
+ func fib(n int) int {
97
+ a, b := 0, 1
98
+ for i := 0; i < n; i++ {
99
+ a, b = b, (a+b)%1000000007
100
+ }
101
+ return a
102
+ }
103
+ ```
104
+
89
105
### ** JavaScript**
90
106
91
107
``` js
@@ -94,29 +110,15 @@ public:
94
110
* @return {number}
95
111
*/
96
112
var fib = function (n ) {
97
- let a = 0,
98
- b = 1;
99
- for (let i = 0; i < n; ++i) {
100
- const c = (a + b) % (1e9 + 7);
101
- a = b;
102
- b = c;
113
+ let a = 0 ;
114
+ let b = 1 ;
115
+ while (n-- ) {
116
+ [a, b] = [b, (a + b) % (1e9 + 7 )];
103
117
}
104
118
return a;
105
119
};
106
120
```
107
121
108
- ### ** Go**
109
-
110
- ``` go
111
- func fib (n int ) int {
112
- a , b := 0 , 1
113
- for i := 0 ; i < n; i++ {
114
- a, b = b, (a+b)%1000000007
115
- }
116
- return a
117
- }
118
- ```
119
-
120
122
### ** TypeScript**
121
123
122
124
``` ts
0 commit comments