Recursive Function in Mathematica

In summary: Can anyone verify if I wrote it correctly, please? Because from my point of view, and little experience in Mathematica, I see nothing is wrong, yet the code gives wrong answers.
  • #1
EngWiPy
1,368
61
Hello,

I want to write a recursive function in Mathematica, how can I do that?

Regards
 
Physics news on Phys.org
  • #4
You would write it, for ex. 40!

See the Wolfram Mathematica Help for other recursive functions.
 
  • #5
Дьявол said:
You would write it, for ex. 40!

See the Wolfram Mathematica Help for other recursive functions.

I want to build a recursive function, and the foctorial is just an example, not that I want the factorial itself, but I want to know how to write a recursive function through a simple example, like the factorial function.
 
  • #6
saeddawoud said:
I want to write a recursive function in Mathematica, how can I do that?

Very simple example:
Code:
f[0] := 1
f[n_] := n f[n-1]
 
  • #7
CRGreathouse said:
Very simple example:
Code:
f[0] := 1
f[n_] := n f[n-1]

Thank you, but I don't want it to be as this simple, I need it with some IF statements and For loops ...etc. Anyway, I have the following MATLAB code
Code:
function Output = ExpanFact(k,j,N_A)
Output=0;
if k==0 
    Output=1;
elseif j==1 
    Output = 1/factorial(k);
elseif k==1 
    Output=j;
elseif j > 0 
    for l=(k-N_A+1):k
        if l >= 0 & l <= (j-1)*(N_A-1)
            Output=Output+(ExpanFact(l,j-1,N_A)/factorial(k-l));
        end
    end
end
and after a little effort I came with this equivalent Mathematica code:
Code:
output = 0
B[k_, j_, N_] := If[k == 0, output = 1,
  If[j == 1, output = 1/Factorial[k],
   If[k == 1, output = j,
    If[j > 0,
      For[l = (k - N + 1), l <= k, l++,
      If[l >= 0 && l <= ((j - 1)*(N - 1)), 
       output = output + B[l, (j - 1), N]/Factorial[k - l], 
       output]]]]]]
but the later doesn't perform as the former. For example ExpanFact(3,3,3) = 4, where the later doesn't give any thing. Did I miss something?
 
  • #8
saeddawoud said:
Did I miss something?

Well, you're certainly not doing it in the Mathematica style like my factorial example. I would suggest something like
Code:
B[0, j_, N_] := 1
B[1, j_, N_] := j
B[k_, 1, N_] := 1/k!
B[k_, j_, N_] := Sum[B[l, j - 1, N]/(k - l)!, {Max[(k - N + 1), 0],  Min[k, (j - 1)*(N - 1)]}]
Tell me how that works.
 
  • #9
CRGreathouse said:
Well, you're certainly not doing it in the Mathematica style like my factorial example. I would suggest something like
Code:
B[0, j_, N_] := 1
B[1, j_, N_] := j
B[k_, 1, N_] := 1/k!
B[k_, j_, N_] := Sum[B[l, j - 1, N]/(k - l)!, {Max[(k - N + 1), 0],  Min[k, (j - 1)*(N - 1)]}]
Tell me how that works.

This is an elegant code. But I faced with the following error message:
Code:
In[1]:= B[0, j_, N_] := 1
B[1, j_, N_] := j
B[k_, 1, N_] := 1/k!
B[k_, j_, N_] := 
 Sum[B[l, j - 1, N]/(k - l)!, {Max[(k - N + 1), 0], 
   Min[k, (j - 1)*(N - 1)]}]
B[3, 3, 3]


[COLOR="Red"]During evaluation of In[1]:= Sum::write: Tag Max in Max[3-3+1,0] is \
Protected. >>[/COLOR]
Out[5]= (3 Min[2, l])/((3 - l)! l!)

What is the problem?
 
  • #10
I wrote it in this way:

Code:
fun[m_, n_, r_] := If [m <= r <= n, 1, 0]
B[0, j_, N_] := 1;
B[1, j_, N_] := j;
B[k_, 1, N_] := 1/k!;
B[k_, j_, N_] := 
 Sum[B[l, j - 1, N]/Factorial[k - l]*fun[0, ((j - 1)*(N - 1)), l], {l,
    l = k - N + 1, k}]
but it gives wrong answers. For example, B[2,3,3]=4.5, but this code gives 3.5! why?
 
  • #11
The equation mathematically that was written using Mathematica 6 is:

attachment.php?attachmentid=19240&stc=1&d=1244335353.jpg

Can anyone verify if I wrote it correctly, please? Because from my point of view, and little experience in Mathematica, I see nothing is wrong, yet the code gives wrong answers.

Thanks in advance
 

1. What is a recursive function in Mathematica?

A recursive function in Mathematica is a function that calls itself in its own definition. This allows the function to be applied repeatedly on smaller and smaller inputs until a base case is reached.

2. How do I define a recursive function in Mathematica?

To define a recursive function in Mathematica, you can use the := (SetDelayed) operator and include a call to the function within its own definition. Make sure to include a base case to prevent infinite recursion.

3. What is the difference between a recursive function and an iterative function?

The main difference between a recursive function and an iterative function is that a recursive function calls itself in its definition, while an iterative function uses loops to repeatedly apply a set of operations.

4. Can recursive functions in Mathematica handle large inputs?

Yes, recursive functions in Mathematica can handle large inputs as long as the function is properly defined with a base case to prevent infinite recursion. However, using large inputs may result in longer computation times.

5. What are some common uses of recursive functions in Mathematica?

Recursive functions are often used in tasks that involve dividing a problem into smaller sub-problems, such as sorting algorithms, tree traversal, and mathematical sequences. They can also be used for tasks that involve repetitive operations, such as finding the factorial of a number or calculating Fibonacci numbers.

Similar threads

  • MATLAB, Maple, Mathematica, LaTeX
Replies
4
Views
1K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
4
Views
358
  • MATLAB, Maple, Mathematica, LaTeX
Replies
8
Views
3K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
5
Views
1K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
2
Views
146
  • MATLAB, Maple, Mathematica, LaTeX
Replies
6
Views
2K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
3
Views
1K
Replies
3
Views
1K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
1
Views
1K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
13
Views
2K
Back
Top