WinFuture-Forum.de: Fibonacci >> Wie In Vba Oder Visual Stuio Realisieren? - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Fibonacci >> Wie In Vba Oder Visual Stuio Realisieren? Ich schieß immer um eine Größe drüber


#1 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.336
  • Beigetreten: 08. April 06
  • Reputation: 887
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 29. Januar 2007 - 11:53

:angry:

Ähm ich sitz hier vor einen kleinen aber feinen Pfoblem:

Sub main()

'Deklaration der Variabeln
Dim zahl As Long
Dim antwort As Long

'eingabe und Zuweisen der werte
	zahl = InputBox("Bitte geben sie eine Zahl ein", "Eingabe")
	
'ausgabe der Zahl und der Fibonacci Zahl
	antwort = MsgBox("Die " & zahl & ", Fibonacci-Zahl lautet " & fibonacci(zahl))
	
End Sub

Function fibonacci(ByVal zahl As Long)

Dim I As Byte

If zahl = 0 Then
	fibonacci = 0
End If

If zahl = 1 Then
	fibonacci = 1
End If

	For I = 2 To zahl
	fibonacci(I) = fibonacci(I - 1) + fibonacci(I - 2)
	Next I
End Function


wenn ich dem ausführe hab ich entweder einen Speicherüberlauf oder schieße um eine Größe der Fibonacci Reihe am Ziel vorbei.

Wo liegt der Teufel hier im Gebüsch?

HIIIIIEEEELLLFFFEEEE!!!

;D


MFG

Stefan
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 29. Januar 2007 - 12:42

geht viel schöner :angry:

return (zahl<=1)?zahl:fibonacci(zahl-1)+fibonacci(zahl-2);

0

#3 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.336
  • Beigetreten: 08. April 06
  • Reputation: 887
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 29. Januar 2007 - 17:56

Beitrag anzeigenZitat (Witi: 29.01.2007, 12:42)

geht viel schöner ;)

return (zahl<=1)?zahl:fibonacci(zahl-1)+fibonacci(zahl-2);



Also verstehe ich richtig?

Das was du gepostet hast ist das was in die Funktion kommt anstatt meiner Zeilen? ;)

Also bei VBA bekomm ich dann nen Syntax Error ;) (denke mal wegen dem Return) Was Visual Studio 2005 sagt konnte ich leider noch nicht testen. Haben heute den ganzen Tag an einem Projekt dort gearbeitet^^
0

#4 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 29. Januar 2007 - 18:26

Kann es sein, daß du bei jedem Aufruf den kompletten Satz an Fibonacci-Zahlen neuberechnest? Was soll der Mist?

Und wieso machst du es überhaupt rekursiv? Iterativ geht mit konstantem Speicherplatz und in linearer Zeit:


Function fibonacci(ByVal zahl As Long)

If zahl = 0 Then
	fibonacci = 0
End If

If zahl = 1 Then
	fibonacci = 1
End If

Dim a,b,c,c_tmp as Long
a=0
b=1
c=0
For I = 2 To zahl
	c_tmp=c
	c=a+b
	a=b
	b=c_tmp
Next I
fibonacci=c
End Function

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#5 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.336
  • Beigetreten: 08. April 06
  • Reputation: 887
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 29. Januar 2007 - 18:52

Beitrag anzeigenZitat (Rika: 29.01.2007, 18:26)

Kann es sein, daß du bei jedem Aufruf den kompletten Satz an Fibonacci-Zahlen neuberechnest? Was soll der Mist?

Und wieso machst du es überhaupt rekursiv? Iterativ geht mit konstantem Speicherplatz und in linearer Zeit:
Function fibonacci(ByVal zahl As Long)

If zahl = 0 Then
	fibonacci = 0
End If

If zahl = 1 Then
	fibonacci = 1
End If

Dim a,b,c,c_tmp as Long
a=0
b=1
c=0
For I = 2 To zahl
	c_tmp=c
	c=a+b
	a=b
	b=c_tmp
Next I
fibonacci=c
End Function


Danke ;)

Liegt wohl daran, dass wir nach ca 7 Tagen VBA/Visual Studio noch nicht solche Kniffe beherrschen ;)
0

#6 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 29. Januar 2007 - 19:05

Trotzdem solltest du auch die rekursive Variante mal ordentlich hinbekommen:

Function fibonacci(ByVal zahl As Long)

If zahl = 0 Then
	fibonacci = 0
End If

If zahl = 1 Then
	fibonacci = 1
End If

fibonacci = fibonacci(zahl - 1) + fibonacci(zahl - 2)
End Function

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#7 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.336
  • Beigetreten: 08. April 06
  • Reputation: 887
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 29. Januar 2007 - 19:18

Beitrag anzeigenZitat (Rika: 29.01.2007, 19:05)

Trotzdem solltest du auch die rekursive Variante mal ordentlich hinbekommen:

Function fibonacci(ByVal zahl As Long)

If zahl = 0 Then
	fibonacci = 0
End If

If zahl = 1 Then
	fibonacci = 1
End If

fibonacci = fibonacci(zahl - 1) + fibonacci(zahl - 2)
End Function



Klingt logisch ;) nur mich wunderts das dem auch ohne For...Next schleife funzt ;)

Danke nochmal ;)
0

#8 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 29. Januar 2007 - 19:36

Zitat

nur mich wunderts das dem auch ohne For...Next schleife funzt

Öh... genau das war doch die Frage. Was soll die For-Schleife dort überhaupt zu suchen haben?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#9 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.336
  • Beigetreten: 08. April 06
  • Reputation: 887
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 29. Januar 2007 - 19:46

Beitrag anzeigenZitat (Rika: 29.01.2007, 19:36)

Öh... genau das war doch die Frage. Was soll die For-Schleife dort überhaupt zu suchen haben?


Wenn ich das noch recht im Schädel habe war der Zweck, pro durchlauf eine Fibonacci Instanz auszurechnen und die dann mit der darauf folgenden zu multiplizieren.

Die Idee kam ja sogar von unserm Meister/Lehrer/Dozent oder wie man das auch immer nennen mag (blicke bei den neuen bezeichnungen duch meine umschulung noch nicht so durch)
0

#10 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 29. Januar 2007 - 20:51

Zitat

pro durchlauf eine Fibonacci Instanz auszurechnen und die dann mit der darauf folgenden zu multiplizieren.

Nicht multiplizieren, sondern addieren. Ja, das ist genau die iterative Variante.

Du hingegen hattest in jeder Rekursion ein komplette Iteration über die rekursive Erzeugung gemacht. Also jedes Mal alle vorherigen berechnet, aber sofort wieder verworfen, und das auch noch rekursiv.
Damit hast du exponentielles Wachstum mit der Faktor 3, selbst die klassische rekursive hätte "nur" einen Faktor von 2.

fibonacci(6) hat bei dir 96 Berechnungen. Die normale Rekursion hat nur 40.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0