Skip to content

Commit f5aeb9a

Browse files
author
ivan
committed
impl ch10 recursive
1 parent 7f9d32d commit f5aeb9a

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package ch10_recursive
2+
3+
import scala.collection.mutable
4+
5+
object RecursiveDemo {
6+
7+
def calculateStepWays(steps: Int): Int = {
8+
//use knownResults to avoid duplicated computing
9+
val knownResults = mutable.HashMap.empty[Int, Int]
10+
steps match {
11+
case 1 => 1
12+
case 2 => 2
13+
case _ => knownResults.get(steps) match {
14+
case Some(result) => result
15+
case None => {
16+
val result = calculateStepWays(steps - 1) + calculateStepWays(steps - 2)
17+
knownResults.put(steps, result)
18+
result
19+
}
20+
}
21+
}
22+
}
23+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package ch10_recursive
2+
3+
import org.scalatest.{FlatSpec, Matchers}
4+
5+
class RecursiveDemoTest extends FlatSpec with Matchers {
6+
7+
behavior of "RecursiveDemoTest"
8+
9+
it should "calculateStepWays" in {
10+
RecursiveDemo.calculateStepWays(1) should equal(1)
11+
RecursiveDemo.calculateStepWays(2) should equal(2)
12+
RecursiveDemo.calculateStepWays(3) should equal(3)
13+
RecursiveDemo.calculateStepWays(4) should equal(5)
14+
RecursiveDemo.calculateStepWays(5) should equal(8)
15+
}
16+
17+
}

0 commit comments

Comments
 (0)