Factorial in Befunge
This example uses iterative factorial definition.The program consists of two loops — the first one calculates numbers from 16 to 1, the second one does the actual factorial calculation.
First of all we put 16 on top of the stack (as 4*4) — this will be the maximal number which has to be processed. The first loop follows, executed in clockwise order. One iteration puts into the stack a number which equals the previous one decremented. When this number becomes zero, loop breaks (_
in the second line), and the instruction pointer goes right.
Next the top element of the stack (0) is removed and 1 is placed there instead (this is the current factorial value). The second loop follows, executed in counterclockwise order. One iteration performs the following actions:

\
— two top elements of the stack (the factorial calculated earlier and the next number) are swapped (the next number becomes the topmost). If the stack contains only one element, 0 is pushed on top of it. 
:_
— if the next number is 0 (or if the stack is empty), the loop breaks. 
.
— next number is printed (its copy stays in the stack). 
block
,,,,"! = "
pushes characters in the stack and prints them immediately. The string is scanned righttoleft, but the characters are printed from topmost to lower ones, so for the programmer the string looks exactly the way it will be printed. 
.:*
— new factorial is calculated and printed (its copy stays in the stack). 
,*25
— newline printed.
44* >:1:v v ,*25 .:* ,,,,"! = ".:_ @
^ _ $1 > \: ^
Comments
]]>blog comments powered by Disqus
]]>