github.com/NeowayLabs/nash@v0.2.2-0.20200127205349-a227041ffd50/testfiles/fibonacci.sh (about)

     1  #!/usr/bin/env nash
     2  
     3  # Recursive fibonacci implementation to find the value
     4  # at index n in the sequence.
     5  
     6  # Some times:
     7  #   λ> time ./testfiles/fibonacci.sh 1
     8  #   1
     9  #   0.00u 0.01s 0.01r 	 ./testfiles/fibonacci.sh 1
    10  #   λ> time ./testfiles/fibonacci.sh 2
    11  #   1 2
    12  #   0.01u 0.01s 0.02r 	 ./testfiles/fibonacci.sh 2
    13  #   λ> time ./testfiles/fibonacci.sh 3
    14  #   1 2 3
    15  #   0.01u 0.03s 0.03r 	 ./testfiles/fibonacci.sh 3
    16  #   λ> time ./testfiles/fibonacci.sh 4
    17  #   1 2 3 5
    18  #   0.04u 0.04s 0.07r 	 ./testfiles/fibonacci.sh 4
    19  #   λ> time ./testfiles/fibonacci.sh 5
    20  #   1 2 3 5 8
    21  #   0.09u 0.07s 0.13r 	 ./testfiles/fibonacci.sh 5
    22  #   λ> time ./testfiles/fibonacci.sh 10
    23  #   1 2 3 5 8 13 21 34 55 89
    24  #   1.31u 1.18s 2.03r 	 ./testfiles/fibonacci.sh 10
    25  #   λ> time ./testfiles/fibonacci.sh 15
    26  #   1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
    27  #   15.01u 13.49s 22.55r 	 ./testfiles/fibonacci.sh 15
    28  #   λ> time ./testfiles/fibonacci.sh 20
    29  #   1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946
    30  #   169.27u 155.50s 265.19r 	 ./testfiles/fibonacci.sh 20
    31  
    32  # a is lower or equal than b?
    33  fn lte(a, b) {
    34  	var _, st <= test $a -le $b
    35  
    36  	return $st
    37  }
    38  
    39  fn fib(n) {
    40  	if lte($n, "1") == "0" {
    41  		return "1"
    42  	}
    43  
    44  	var a, _ <= expr $n - 1
    45  	var b, _ <= expr $n - 2
    46  	var _a <= fib($a)
    47  	var _b <= fib($b)
    48  	var ret, _ <= expr $_a "+" $_b
    49  
    50  	return $ret
    51  }
    52  
    53  fn range(start, end) {
    54  	var seq, _ <= seq $start $end
    55  	var lst <= split($seq, "\n")
    56  
    57  	return $lst
    58  }
    59  
    60  for i in range("1", $ARGS[1]) {
    61  	print("%s ", fib($i))
    62  }
    63  
    64  print("\n")