Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. // Function that finds the n number in the fibonacci sequence
  2. // Takes 1 parameter (desired element's order number in the sequence)
  3. // Returns 1 value (desired element's value)
  4. // Bonus: works with negative numbers
  5.  
  6. /*
  7. 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
  8. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  9. */
  10.  
  11. /*
  12. def recursiveFib(n: Long): Long ={
  13. if (n <= 1)
  14. n
  15. else
  16. recursiveFib(n-1) + recursiveFib(n-2)
  17. }
  18. */
  19.  
  20. def recursiveFib(n: Long): Long ={
  21. if (n == 0 || n == 1)
  22. n
  23. else if (n < 0)
  24. recursiveFib(n+2) - recursiveFib(n+1)
  25. else
  26. recursiveFib(n-1) + recursiveFib(n-2)
  27. }
  28.  
  29.  
  30.  
  31. println("Recursive function with 0, 1, 10, 7, 13, -6")
  32. recursiveFib(0)
  33. recursiveFib(1)
  34. recursiveFib(7)
  35. recursiveFib(10)
  36. recursiveFib(13)
  37. recursiveFib(-6)
  38.  
  39.  
  40. def tailRecursiveFib(n: Long): Long ={
  41. def rec(counter:Long, resultOne:Long, resultTwo:Long):Long={
  42. //println(s"$counter | $resultOne $resultTwo\n")
  43. if (counter <= 1)
  44. resultTwo
  45. else
  46. rec(counter-1, resultTwo, resultOne+resultTwo)
  47. }
  48. rec(n, 0, 1)
  49. }
  50.  
  51. println("Tail recursive function with 0, 1, 10, 7, 13")
  52. tailRecursiveFib(0)
  53. tailRecursiveFib(1)
  54. tailRecursiveFib(7)
  55. tailRecursiveFib(10)
  56. tailRecursiveFib(13)
  57.  
  58.  
  59.  
  60. def imperativeFib(n: Long): Long ={
  61. if (n == 0) n
  62. else{
  63. var counter = n
  64. var first = 0L
  65. var second = 1L
  66. var result = 1L
  67. while (counter >= 2){
  68. //println(s"$counter | $first $second | $result\n")
  69. result = first + second
  70. first = second
  71. second = result
  72. counter -= 1
  73. }
  74. result
  75. }
  76. }
  77.  
  78. println("Imperative function with 0, 1, 10, 7, 13")
  79. imperativeFib(0)
  80. imperativeFib(1)
  81. imperativeFib(7)
  82. imperativeFib(10)
  83. imperativeFib(13)
  84.  
  85. def fib(n: Long): Long={
  86. ((scala.math.pow(1.618034, n) - scala.math.pow(-0.618034, n))/scala.math.sqrt(5)).toLong
  87. }
  88.  
  89. println("Mathematical function using the Golden Ratio with 0, 1, 10, 7, 13")
  90. fib(0)
  91. fib(1)
  92. fib(7)
  93. fib(10)
  94. fib(13)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement