// This file is part of www.nand2tetris.org // and the book "The Elements of Computing Systems" // by Nisan and Schocken, MIT Press. // File name: projects/08/FunctionCalls/FibonacciElement/Main.vm // Computes the n'th element of the Fibonacci series, recursively. // n is given in argument[0]. Called by the Sys.init function // (part of the Sys.vm file), which also pushes the argument[0] // parameter before this code starts running. function Main.fibonacci 0 push argument 0 push constant 2 lt // checks if n<2 if-goto IF_TRUE goto IF_FALSE label IF_TRUE // if n<2, return n push argument 0 return label IF_FALSE // if n>=2, returns fib(n-2)+fib(n-1) push argument 0 push constant 2 sub call Main.fibonacci 1 // computes fib(n-2) push argument 0 push constant 1 sub call Main.fibonacci 1 // computes fib(n-1) add // returns fib(n-1) + fib(n-2) return