Counter goes up than down to 1 in recursive function
    1 view (last 30 days)
  
       Show older comments
    
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
Accepted Answer
  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
  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 :)
More Answers (1)
  Léonard Roussel
 on 4 Jul 2012
        1 Comment
  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 :))
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
