Counter goes up than down to 1 in recursive function

2 views (last 30 days)
Hello,
I want my function to return how many 'moving windows' of a particular size can fit in a given length_n-long signal, with a given hop size.
here is my function :
| function N_n = numWindows( N_n, currentSample_n, hopSize_n, length_n, width_n )
% check if we have reached the end of the signal
if currentSample_n + width_n >= length_n
return
else
currentSample_n = currentSample_n + hopSize_n ;
N_n = N_n + 1;
% here we call the same function on the rest of the signal
numWindows( N_n, currentSample_n, hopSize_n, length_n, width_n );
end
return
end|
This code returns systematically N_n = 2; When I entered debug mode I saw that N_n was increasing normally to the correct value, then as the function exited the "if"s one after the other, I saw that N_n was decreasing 1 by 1, just as it had increased in the first place. And the function stopped with N_n = 2.
I tried it with a while loop but it was quickly taking a very long time as the signals started to get long (= big length_n input value).
I would be very grateful to any kind of advice on this problem, thank you very much !
Léo.
  4 Comments

Sign in to comment.

Accepted Answer

AC
AC on 4 Jul 2012
Ok, I think I got it: I believe you need to recursively output N_n when you are calling numWindows within the function.
I don't know signal processing, so sorry if it doesn't make sense, but if you try:
N_n=numWindows(1,1,2,100,4);
Then you'll get N_n=49 after modification.
Does it sound about right?
  4 Comments
Léonard Roussel
Léonard Roussel on 4 Jul 2012
Yes it DOES work, but I actually don't understand what really changed. Anyway, thank you very much !
AC
AC on 4 Jul 2012
Sure :) What changes is just the storage of your variable, not the computations. When you compute N_n=N_n+1; you do it within the recursive function (except for the first one), but you never actually store it. It's quite tricky, a bit like time travel :)

Sign in to comment.

More Answers (1)

Léonard Roussel
Léonard Roussel on 4 Jul 2012
Hum ... not exactly : the command window returns successively all descending values of N_n from 49 to 2 ...
thanks again
  1 Comment
AC
AC on 4 Jul 2012
Did you try the bit of code I just submitted? It works on my computer. (I think we posted at the same time :))

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!