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")