# Problem with factorial recursive function

137 views (last 30 days)
Stu145 on 28 Jan 2015
Answered: Abdimalik on 14 Dec 2022
Whenever I run the code for a matrix of n values, like n=1:10, only the last 2 factorials are displayed while the rest are 0's. Would anyone be able to tell me where I have gone wrong?
Code:
function x = fact(n)
if n<=1
x = 1;
else
x = n .* fact(n-1) ;
end
end

Titus Edelhofer on 28 Jan 2015
Hi Arun,
your code does not work for arrays because of the "if n<=1". You would need to do something like
idx = (n>1);
x(~idx) = 1;
x(idx) = n(idx).* ...
Titus
Shubham Tyagi on 15 Aug 2016
I'm compiling this code with a 2*4 matrix but (dimensions doesn't match in val(i)=r(i).*fact(r(i)-1);) type error is coming.
function val=fact(r)
i=(r>1); val(~i)=1; if r==1 return end val(i)=r(i).*fact(r(i)-1); end

Image Analyst on 31 Jan 2015
Not sure what you did, but it worked fine for me. I put all this (both functions) into test.m
function test
clc;
for k = 1 : 10
kFactorial = fact(k);
fprintf('%d! = %d\n', k, kFactorial);
end
function x = fact(n)
if n<=1
x = 1;
else
x = n .* fact(n-1) ;
end
In the command window you'll see:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
Torsten on 25 Aug 2016
Reshape everything to vectors and reshape back to matrices, if necessary.
Best wishes
Torsten.

Titus Edelhofer on 25 Aug 2016
Hi,
two minor changes are needed:
function x = fact(n)
x = ones(size(n));
idx = (n>1);
if any(idx)
x(idx) = n(idx).*fact(n(idx)-1);
end
First, you need to initialize x as an array of the same size as n (because for fact(n-1) otherwise the array could be smaller), giving the error you observed.
Second, protect the recursive call to fact(n-1) by doing this only if there is anything to do...
Titus
Titus Edelhofer on 26 Aug 2016
Calling for a matrix works fine, btw.:
fact([2 3 4; 5 6 7])
ans =
2 6 24
120 720 5040

Anil Sarode on 26 Dec 2017
Edited: Walter Roberson on 26 Dec 2017
sorry i copied your code :
this is the one way to solve your problem :
function file: from where you make function call each time using for loop :
n=1:10;
y=[];
for i=1:length(n)
y(i)=fact(i) ;
end
function [x] = fact(n)
if n<=1
x = 1;
else
x = n .* fact(n-1) ;
end
end

Abdimalik on 14 Dec 2022
You don't need to read input or print anything. Your task is to complete the function factorial() which takes an integer N as input parameters and returns an integer, the factorial of N.

### Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by