# How to recursively reduce the function arguments

6 views (last 30 days)

Show older comments

Is there a way to create a function with one less argument dynamically? Basicly I'd like to find a way to do the following recursively or in a loop.

f4 = @(x1,x2,x3,x4) f5(x1, x2, x3, x4, 1);

f3 = @(x1,x2,x3) f4(x1, x2, x3, 1);

...

f1 = @(x1) f2(x1, 1);

r = f1(1)

function r = f5(x1, x2, x3, x4, x5)

r = x1 + x2 + x3 + x4 + x5

end

### Accepted Answer

Stephen
on 9 Nov 2021

It can be done with VARARGIN:

N = 5;

C = cell(1,N);

C{N} = @f5;

for k = N-1:-1:1

C{k} = @(varargin) C{k+1}(varargin{:},1);

end

C{1}(1)

function r = f5(x1, x2, x3, x4, x5)

r = x1 + x2 + x3 + x4 + x5;

end

### More Answers (2)

Jan
on 9 Nov 2021

This should work with str2func and eval.

This is such a cruel programming technique, that I recommend not to use it. Such meta-programming for creating code dynamically is hard to debug and Matlab's JIT acceleration cannot work. This can slow down the code by a factor 100 compared to some code, which avoid the dynamic creation of variables and functions.

##### 1 Comment

Adam Danz
on 9 Nov 2021

Adam Danz
on 9 Nov 2021

x1 = rand(1);

x2 = rand(1);

x3 = rand(1);

x4 = rand(1);

p = [x1, x2, x3, x4];

f5([p,1])

p = [x1, x2, x3];

f5([p,1])

p = [x1, x2];

f5([p,1])

function f5(varargin)

sum([varargin{:}])

end

##### 0 Comments

### See Also

### Community Treasure Hunt

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

Start Hunting!