1. Subroutines

  • Douglas Blank, Fall 2015
  • Bryn Mawr College, CS240 Computer Organization
  • Notes on Chapter #9

1.1 Why subroutines?

1.2 Writing Subroutines

  • Blocks of code can be encoded as subroutines
    • One entry point (where you JSR to)
    • One exit point (where you RET from)
  • A subroutine is a program fragment that:
    • Lives in user space
    • Performs a well-defined task
    • Is invoked ("called") by a user program
    • Returns control to the calling program when finished
  • Reasons for subroutines:
    • Reuse useful (and debugged) code without having to keep typing it in
    • Divide task among multiple programmers
    • Use vendor-supplied library of useful routines

1.3 JSR/JSRR

  • Jumps to a location (like an unconditional branch, BRnzp PC+OFFSET or JMP REG), and saves current PC (address of next instruction) in R7
    • Saving the return address is called “linking”
  • JSR vs JSRR
    • Bit 11 specifies addressing mode
    • If IR[11]=1, JSR
      • PC-relative: target address = PC + Sext(IR[10:0])
    • If IR[11]=0, JSRR
      • Register: target address = contents of Register[IR[8:6]]

What important feature does JSSR provide that JSR does not?

1.3.1 RET instruction

RET is the same as "JMP R7"

1.4 Interfacing with Subroutines

  • Registers may be be overwritten in subroutines so we need to save current register values. Who saves the register values?
  • Called routine saves registers -- “callee-save”
    • Before start, save any registers that will be altered (unless altered value is desired by calling program!)
    • Before return, restore those same registers
  • Calling routine saves registers -- “caller-save”
    • Save registers destroyed by own instructions or by called routines (if known), if values needed later. Examples:
      • save R7 before TRAPs that return
      • save R0 before TRAP x23 (input character)
    • Or avoid altogether using registers that callees use
  • Register values are saved by storing them in memory

1.5 Example: Negating a number

  • Use JSR to jump
    • saves PC to R7
  • Use RET to return
    • sets PC from R7
In [27]:
.ORIG x3000
    AND R0, R0, R0
    ADD R0, R0, #10
    JSR NEGATE
    HALT
NEGATE:
    NOT R0, R0
    ADD R0, R0, #1
    RET
    .END
============================================================
Memory disassembled:
============================================================
           x3000: x5000  AND R0, R0, R0                            [line: 1]
           x3001: x102A  ADD R0, R0, #10                           [line: 2]
           x3002: x4801  JSR NEGATE                                [line: 3]
           x3003: xF025  HALT                                      [line: 4]
NEGATE:    x3004: x903F  NOT R0, R0                                [line: 6]
           x3005: x1021  ADD R0, R0, #1                            [line: 7]
           x3006: xC1C0  RET                                       [line: 8]

============================================================
Registers:
============================================================
PC: x3007
N: 0 Z: 1 P: 0 
R0: x0000 R1: x0000 R2: x0000 R3: x0000 
R4: x0000 R5: x0000 R6: x0000 R7: x0000 
In [28]:
%exe
============================================================
Computation completed
============================================================
Instructions: 7
Cycles: 46 (0.000023 milliseconds)

============================================================
Registers:
============================================================
PC: x048E
N: 1 Z: 0 P: 0 
R0: xFFF6 R1: x0000 R2: x0000 R3: x0000 
R4: x0000 R5: x0000 R6: x0000 R7: x3004 

1.6 Problems using Subroutines?

  • How do you handle one subroutine calling another?
    • Calling subroutines is like passing a baton
  • Takes some time for JSR and RET
  • How do you handle recursion?
    • A function being used more than once during a call

Stacks! Chapter 10

1.6.1 Stack

You can have many general purpose stacks in your programs (eg, calculator in chapter 10).

But you need a "call stack" for handling subroutine calls.

LEA R2, Stack       ;; R2 is Top of Stack
Stack:  .BLKW #100

...

PUSH:   STR R7, R2, #0      ;; Save R7 to Stack
        ADD R2, R2, #1      ;; Increment Stack

...

POP:    ADD R2, R2, #-1     ;; Decrement Stack
        LDR R7, R2, #0      ;; Load Stack into R7

1.7 Warning: Heresy Approaching!

The following content may not be appropriate for all viewers. It contains information that the establishment may not want you to know. This information may forever change your mental structures and ideas of computation. You have been warned. :)

1.7.1 Recursion in High-level Languages

Almost all high-level languages implement function calls using a call stack.

  • Call stack is a fixed size!
In [32]:
%%python

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(10000))
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/metakernel-0.10.5-py3.4.egg/metakernel/magics/python_magic.py", line 63, in eval
    exec(code.strip(), self.env)
  File "<string>", line 7, in <module>
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 5, in factorial
  File "<string>", line 2, in factorial
RuntimeError: maximum recursion depth exceeded in comparison

In [33]:
%%processing

int factorial(int n) {
    if (n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

fill(0);
text(factorial(5), 0, 10);

1.7.2 Recursion

  • Simplest solution: use a "stack" to keep track of who called whom
  • Fixed size makes using recursion risky because you don't know how deep you can go

1.7.3 Handling Recursion via Stacks

The relationship between stacks and recursion are not well-understood ideas by many computer scientists. For example, a course using the LC3 at UPenn claims:

"LC3 Simulator cannot handle Recursion currently"

This is simply not true.

(It may be true that the lc3 C compiler cannot handle recursion.)

1.8 recur program

# pseudo code:
def recur(N):
    r0 += 1
    if N == 0:
        return
    else:
        recur(N - 1)

print(r0)

1.9 recur.asm

In [23]:
.ORIG x3000
         LEA R2, Stack           ; R2 is Stack
         AND R0, R0, #0          ; Times Foo called
         LD R3, ASCII            ; ASCII "0"
Main:    JSR Foo
         ADD R0, R0, R3
         OUT
         HALT
Stack:   .BLKW #100
Counter: .FILL #3
ASCII:   .FILL #48

;;;; --------------------

Foo:     STR R7, R2, #0         ; Store R7 to stack
         ADD R2, R2, #1         ; Increment stack
         ADD R0, R0, #1         ; Called Foo! Increment
         LD R1, Counter         ; 1. Decrement Counter
         ADD R1, R1, #-1        ; 2.
         ST R1, Counter         ; 3.
         BRz After              ; After N times,RET 
         JSR Foo                ; Otherwise, recur
After:   ADD R2, R2, #-1        ; Decrement stack                               
         LDR R7, R2, #0
         RET
         .END
============================================================
Memory disassembled:
============================================================
           x3000: xE406  LEA R2, STACK                             [line: 1]
           x3001: x5020  AND R0, R0, #0                            [line: 2]
           x3002: x2669  LD R3, ASCII                              [line: 3]
MAIN:      x3003: x4869  JSR FOO                                   [line: 4]
           x3004: x1003  ADD R0, R0, R3                            [line: 5]
           x3005: xF021  OUT                                       [line: 6]
           x3006: xF025  HALT                                      [line: 7]
STACK:     x3007: x3004  ST R0, x300C                              [line: 8]
           x3008: x3075 - 12405 
           x3009: x3075 - 12405 
           x300A: x0000 - \0
           x300B: x0000 - \0
           x300C: x0000 - \0
           x300D: x0000 - \0
           x300E: x0000 - \0
           x300F: x0000 - \0
           x3010: x0000 - \0
           x3011: x0000 - \0
           x3012: x0000 - \0
           x3013: x0000 - \0
           x3014: x0000 - \0
           x3015: x0000 - \0
           x3016: x0000 - \0
           x3017: x0000 - \0
           x3018: x0000 - \0
           x3019: x0000 - \0
           x301A: x0000 - \0
           x301B: x0000 - \0
           x301C: x0000 - \0
           x301D: x0000 - \0
           x301E: x0000 - \0
           x301F: x0000 - \0
           x3020: x0000 - \0
           x3021: x0000 - \0
           x3022: x0000 - \0
           x3023: x0000 - \0
           x3024: x0000 - \0
           x3025: x0000 - \0
           x3026: x0000 - \0
           x3027: x0000 - \0
           x3028: x0000 - \0
           x3029: x0000 - \0
           x302A: x0000 - \0
           x302B: x0000 - \0
           x302C: x0000 - \0
           x302D: x0000 - \0
           x302E: x0000 - \0
           x302F: x0000 - \0
           x3030: x0000 - \0
           x3031: x0000 - \0
           x3032: x0000 - \0
           x3033: x0000 - \0
           x3034: x0000 - \0
           x3035: x0000 - \0
           x3036: x0000 - \0
           x3037: x0000 - \0
           x3038: x0000 - \0
           x3039: x0000 - \0
           x303A: x0000 - \0
           x303B: x0000 - \0
           x303C: x0000 - \0
           x303D: x0000 - \0
           x303E: x0000 - \0
           x303F: x0000 - \0
           x3040: x0000 - \0
           x3041: x0000 - \0
           x3042: x0000 - \0
           x3043: x0000 - \0
           x3044: x0000 - \0
           x3045: x0000 - \0
           x3046: x0000 - \0
           x3047: x0000 - \0
           x3048: x0000 - \0
           x3049: x0000 - \0
           x304A: x0000 - \0
           x304B: x0000 - \0
           x304C: x0000 - \0
           x304D: x0000 - \0
           x304E: x0000 - \0
           x304F: x0000 - \0
           x3050: x0000 - \0
           x3051: x0000 - \0
           x3052: x0000 - \0
           x3053: x0000 - \0
           x3054: x0000 - \0
           x3055: x0000 - \0
           x3056: x0000 - \0
           x3057: x0000 - \0
           x3058: x0000 - \0
           x3059: x0000 - \0
           x305A: x0000 - \0
           x305B: x0000 - \0
           x305C: x0000 - \0
           x305D: x0000 - \0
           x305E: x0000 - \0
           x305F: x0000 - \0
           x3060: x0000 - \0
           x3061: x0000 - \0
           x3062: x0000 - \0
           x3063: x0000 - \0

============================================================
Registers:
============================================================
PC: x3078
N: 0 Z: 1 P: 0 
R0: x0000 R1: x0000 R2: x0000 R3: x0000 
R4: x0000 R5: x0000 R6: x0000 R7: x0000 
In [24]:
%exe
3============================================================
Computation completed
============================================================
Instructions: 45
Cycles: 344 (0.000172 milliseconds)

============================================================
Registers:
============================================================
PC: x048E
N: 0 Z: 1 P: 0 
R0: x0033 R1: x0000 R2: x3007 R3: x0030 
R4: x0000 R5: x0000 R6: x0000 R7: x3007 

1.10 Recursion

  • Simplest solution: use a "stack" to keep track of who-called-who

But that has problems!

There are other methods of keeping track of the "linking" between blocks of computation.

1.11 Problems with recursion, etc

  • Can run out of stack space
  • Sometimes we don't need a stack at all
# pseudo code:

def loop():
   check_something()
   loop()

Take Programming Languages for more heresy.

In [25]:
%kernel calysto_scheme.kernel CalystoScheme
Out[25]:
<calysto_scheme.kernel.CalystoScheme object at 0x7f78b9e3aa58>
In [26]:
%%kx

(set! use-stack-trace #f)

(define loop
   (lambda () (loop)))
   
;;(loop)

1.12 Let the computer figure it out!

  • In the future, a programmer may have no idea what assembly code is being used
  • May be a huge difference between what the programmer writes and what the machine executes
    • Computer may use subroutines "in-line" rather than calling
    • Rearrange code, learn best paths, change types...

1.13 Predictions, By Doug (2015)

  • Compilers and assembly language will go away in favor of runtime systems that compile and adapt on the fly
  • Generated machine code won't be able to be "understood" by humans
  • Many of the current styles of computing will be irrelevant

1.14 Why is this so controversial?

  • I don't know
  • Engineers are control freaks
  • Giving up control (and understanding) is not something that many want to do
  • It breaks with traditional computing
  • What will the humans do? What is "programming" then?

1.15 Question

  • If there is little connection between what I write with a high-level language and the machine does, and the computer can figure it out the details better than I can, why do I need to learn assembly language?

Because we have to write this future system.

References

CMPE12 – Summer 2008 – Slides by ADB CMPE12 – Winter 2009 – Ferguson