equal
deleted
inserted
replaced
155 if (n == 0) x else iterT(n - 1, f, f(x)) |
155 if (n == 0) x else iterT(n - 1, f, f(x)) |
156 |
156 |
157 |
157 |
158 //non-tail recursive iter |
158 //non-tail recursive iter |
159 |
159 |
160 def iter[A](n: Int, f: A => A, x: A): A = |
160 //def iter[A](n: Int, f: A => A)(x: A): A = |
161 if (n == 0) x else f(iter(n - 1,f, x)) |
161 // if (n == 0) x else f(iter(n - 1,f, x)) |
162 |
162 |
163 |
163 |
164 iter(200000, (x: Int) => x + 1, 0) |
|
165 iterT(200000, (x: Int) => x + 1, 0) |
|
166 iterT(100, (x: Int) => x * 2, 2) |
|
167 iterT(100, (x: BigInt) => x * 2, BigInt(2)) |
|
168 iterT(10, (x: String) => x ++ "a", "a") |
|
169 |
164 |
170 // (2b) |
165 // (2b) |
171 |
166 |
172 def size(r: Rexp): Int = r match { |
167 def size(r: Rexp): Int = r match { |
173 case ZERO => 1 |
168 case ZERO => 1 |
190 def fixpT[A](f: A => A, x: A): A = { |
185 def fixpT[A](f: A => A, x: A): A = { |
191 val fx = f(x) |
186 val fx = f(x) |
192 if (fx == x) x else fixpT(f, fx) |
187 if (fx == x) x else fixpT(f, fx) |
193 } |
188 } |
194 |
189 |
195 fixpT((x:Int) => if (200000 < x) x else x + 1, 0) |
|
196 |
|
197 def ctest(n: Long): Long = |
190 def ctest(n: Long): Long = |
198 if (n == 1) 1 else |
191 if (n == 1) 1 else |
199 if (n % 2 == 0) n / 2 else 3 * n + 1 |
192 if (n % 2 == 0) n / 2 else 3 * n + 1 |
200 |
193 |
201 fixpT(ctest, 97L) |
194 fixpT(ctest, 97L) |