It seems that someone needed an optimized factorial-routine���
The problem on the other hand is, that the machine friendly code is much less ���didactical" than the human friendly common implementation. To have both I propose to add the human friendly clear and short version as comment. Its a bit like some primitive methods were after the primitive call there is the smalltalk version as well (VisualWorks).

Regards, Bernhard H��fner

...
The algos are different:
 
Pharo 8:
Integer>>factorial
                "Answer the factorial of the receiver."
 
                self = 0 ifTrue: [^ 1].
                self > 0 ifTrue: [^ self * (self - 1) factorial].
                self error: 'Not valid for negative integers'
 
 
Pharo 9:
 
Integer>>factorial
| nex nexnext acc |
                "Guard for know cases (0,1,2,error)"
                self < 3
                                ifTrue: [ ^ self < 0
                                                                ifTrue: [ self error: 'Not valid for negative integers' ]
                                                                ifFalse: [ self > 0
                                                                                                ifTrue: [ self ]
                                                                                                ifFalse: [ 1 ] ] ].
                acc := 2.
                nex := 2.
                nexnext := 10.
                
                self // 2 - 1
                                timesRepeat: [ nex := nex + nexnext.
                                                nexnext := nexnext + 8.
                                                acc := acc * nex ].
                self odd
                                ifTrue: [ acc := acc * self ].
                ^ acc
 
 ...