I need to find the factorial in java without using loop or recursion ? So if there is any way then please help . Thanks
-
You can't really compute a factorial without loop nor recursion. – Denys Séguret Nov 17 '12 at 18:57
-
1you can use http://en.wikipedia.org/wiki/Stirling%27s_approximation. – twain249 Nov 17 '12 at 19:02
-
2You can always [parse this page](http://membres.multimania.fr/rsirdey/facttabl.htm) ;-) – Tomasz Nurkiewicz Nov 17 '12 at 19:06
6 Answers
Use Stirling approximation for Gamma function http://en.wikipedia.org/wiki/Stirling%27s_approximation
But it will be not precise.

- 29,281
- 63
- 213
- 385
There is another post on here which you might like to have a look at:
Is there a method that calculates a factorial in Java?
Also - this link has lots of different implementations for factorial functions - you might find what you are looking for on here. At the very least, you will learn tons about factorials..
http://www.luschny.de/math/factorial/FastFactorialFunctions.htm

- 1
- 1

- 656
- 1
- 7
- 16
Slightly impractical but no explicit loop anywhere.
import javax.swing.Timer;
import java.awt.event.*;
import java.util.concurrent.ArrayBlockingQueue;
public class Fac {
public static int fac(final int _n) {
final ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(1);
final Timer timer = new Timer(0, null);
timer.addActionListener(new ActionListener() {
int result = 1;
int n = _n;
public void actionPerformed(ActionEvent e) {
result *= n;
n--;
if(n == 0) {
try {
queue.put(result);
} catch(Exception ex) {
}
timer.stop();
}
}
});
timer.start();
int result = 0;
try {
result = queue.take();
} catch(Exception ex) {
}
return result;
}
public static void main(String[] args) {
System.out.println(fac(10));
}
}

- 8,049
- 2
- 20
- 37
Simple one liner solution, though internally it is doing a loop, as it can't possible without it, but you don't need to do it yourselves:
Long factorialNumber = LongStream.rangeClosed(2, N).reduce(1, Math::multiplyExact);

- 6,749
- 16
- 58
- 100
You precompute the values.
More seriously, it's not really doable, since recursion and loops are inevitable if you might need to do arbitrarily much computation.

- 191,574
- 25
- 345
- 413
We can do a functional factorial in Java 8 :
package com.promindis.jdk8;
import java.math.BigInteger;
import static java.math.BigInteger.*;
public class Factorial implements TCO {
private TailCall<BigInteger> factorialTCO(
final BigInteger fact, final BigInteger remaining) {
if (remaining.equals(ONE))
return done(fact);
else
return call(() ->
factorialTCO(fact.multiply(remaining), dec(remaining)));
}
private BigInteger dec(final BigInteger remaining) {
return remaining.subtract(ONE);
}
private BigInteger apply(final String from) {
return factorialTCO(ONE, new BigInteger(from)).invoke();
}
public static void main(final String[] args) {
System.out.println(new Factorial().apply("5"));
System.out.println(new Factorial().apply("100"));
}
}

- 2,196
- 1
- 12
- 15
-
although TBH both this and SpiderPig's solutions are just playing with semantics...it's recursion, but not your regular 'function call' type recursion. – Graham Griffiths Aug 23 '13 at 15:46