Avatar billede nima Nybegynder
25. juli 2009 - 01:50 Der er 3 kommentarer og
1 løsning

Rekursiv funktion

Hej Alle,

Er ny til VBA, så her har i et spørgsmål.
Jeg har lavet en rekursiv funktion (simpel), som efter at have kørt færdigt, skal returnere resultatet. Problemet er, at metoden returnere det forkerte! Men når man sætter et breakpoint i næstsidste linje i "FindGuess", vises her det rigtige resultat, som den burde returnere.

Det er ligesom, at når "FindGuess" returnere resultatet første gang, kører funktionen stadigvæk videre, og ændrer på resultatet. Hvorfor stopper funktionen ikke første gang den returnere sin værdi, men i stedet fortsætter med at køre flere gange?

Ideén er, at når flg. er sandt, skal funktionen returnere en værdi

    If (Abs(target - result) > 0.001)


Håber i har svaret,
på forhånd tak

ps. Hvis i kan se at den kan optimeres, eller gøres bedre, må i meget gerne sige til :)

----------------------------------------------------------
Sub Makro1()

' Initialize
result = 0
target = 5 + (2 ^ 0.42)

guessResult = FindGuess(0, 1, True)
   
End Sub


Public Function FindGuess(intervalMin As Single, intervalMax As Single, direction As Boolean) As Single
    If direction Then
        middleGuessValue = Abs(((intervalMax - intervalMin) / 2)) + middleGuessValue
    Else
        middleGuessValue = Abs(Abs(((intervalMax - intervalMin) / 2)) - middleGuessValue)
    End If
   
    result = CalculateResult(middleGuessValue)
   
    ' We dont have a match
    If (Abs(target - result) > 0.001) Then
   
      ' Guess is in upper
      If (target > result) Then
        FindGuess middleGuessValue, max, True
      Else
            max = middleGuessValue
      End If
     
      ' Guess is in lower
      If (target < result) Then
          FindGuess min, max, False
      Else
          min = middleGuessValue
      End If
    End If
   
    ' Guess found, calculate the average
    FindGuess = ((intervalMin + intervalMax) / 2)
       
End Function
Avatar billede arne_v Ekspert
25. juli 2009 - 02:18 #1
Den skal retunere når forskellen på target og result er større end 0.001 ?

Jeg ville hav gættet på at den skulle returnere når forskellen var mindre end.
Avatar billede nima Nybegynder
25. juli 2009 - 11:29 #2
hehe, selvfølgelig.
Den skal returnere når forskellen er større en 0.001, det er også det jeg ligger op til. (Var lidt sent da jeg skrev spørgsmålet).

Problemet er, som jeg tror, at rekursive funktioner i VBA er lidt besværlige. Der er én der har samme problem her :

http://bytes.com/groups/net-vb/370817-need-break-out-recursive-function
Avatar billede nima Nybegynder
30. juli 2009 - 12:54 #3
Jeg lukker dette spørgsmål, da jeg nu har løst problemet ved at anvende en while løkke, istedet for en rekursiv funktion.

arne-v, tak for hjælpen indtil videre. Smid et svar, så kan du få nogle point. Du har jo trods alt hjulpet mig noget før :)
Avatar billede arne_v Ekspert
31. juli 2009 - 02:49 #4
Nej tak. Det må blive i næste spørgsmål.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Udviklings- og Forenklingsstyrelsen

ITSM-koordinator

Udviklings- og Forenklingsstyrelsen

Business Analyst med flair for test

Story House Egmont A/S

Application Specialist