Else sans IF

Mazne

XLDnaute Nouveau
Bonjour !
Voilà mon problème, lors du F5 fatidique, Excel me renvoi l'erreur "Else sans IF" et j'avoue que je sèche complétement sur le pourquoi.
Voilà mon bout de code:

If n = 0 Then fibo = 0
ElseIf n = 1 Then fibo = 1
Else
fibo = fibo(n - 1) + fibo(n - 2)
End If
End Function

Sub appel()
MsgBox fibo(0)
MsgBox fibo(1)
MsgBox fibo(5)
End Sub


Voilà, merci d'avance pour votre aide et vos lumières.
 

soenda

XLDnaute Accro
Re : Else sans IF

Bonjour le fil, Mazne

En ce qui concerne le If, tu peux écrire ceci :
Code:
    If n = 0 Then
        fibro = 0
    ElseIf n = 1 Then
        fibro = 1
    Else
        fibro = 3
    End If
on cela :
Code:
    If n = 0 Or n = 1 Then
        fibro = n
    Else
        fibro = 3
    End If

Par ailleurs, si fibro est une fonction qui prend "n" pour argument, on peut écrire :
Code:
    If n <> 0 Or n <> 1 Then fibro = 3
Je n'ai pas testé la récursivité ...

A plus
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Else sans IF

Bonjour à tous
Un poil plus propre et plus rapide est :
Code:
[COLOR="DarkSlateGray"][B]Function fibo(n As Integer) As Double
   If n > 1 Then fibo = fibo(n - 1) + fibo(n - 2) Else fibo = n
End Function[/B][/COLOR]

Non récursif et beaucoup beaucoup plus rapide si n n'est pas tout petit :
Code:
[COLOR="DarkSlateGray"][B]Function fibo1(n As Integer) As Double
Dim i As Long, f0 As Double, f1 As Double
   If n < 2 Then
      fibo1 = n
   Else
      fibo1 = 1
      For i = 2 To n
         f0 = f1
         f1 = fibo1
         fibo1 = f1 + f0
      Next i
   End If
End Function[/B][/COLOR]
ROGER2327
#3349


9 Floréal An CCXVIII
2010-W17-3T15:00:07Z
 

ROGER2327

XLDnaute Barbatruc
Re : Else sans IF

Re...
(...)
Quoique, si n < 0 ...
(...)
Exact !

En voyant la procédure de notre ami, j'ai bêtement cru qu'il cherchait à trouver le nième terme de la suite définie par :
fibo(0) = 0
fibo(1) = 1
Pour tout entier n>1, fibo(n) = fibo(n-1) + fibo(n-2).​

Si j'avais deux sous de jugeote, j'aurais compris qu'il s'agissait évidemment de calculer fibo (-5) et (pourquoi pas ?) fibo(π), fibo(0,2327) et tout un tas d'autres choses.

Cordialement,
ROGER2327
#3351


9 Floréal An CCXVIII
2010-W17-3T16:42:01Z
 

ROGER2327

XLDnaute Barbatruc
Re : Else sans IF

Re...
Re,

Arg, j'avais lu "fibro" ... c'était Fibonacci ... :D

Faut que je change de lunettes ... :D
... ou peut-être pas ... :D

Bonne continuation :)
Pas grave.

Votre remarque était pertinente, car rien n'empêche d'étendre un peu la suite du Fibonacci.
Posons :
fibo(0) = 0
fibo(1) = 1
Pour tout entier n, fibo(n) = fibo(n-1) + fibo(n-2).​
Pour n>1, la définition est équivalente à la définition standard.
On étend sans problème aux valeurs de n strictement négatives en remarquant que
fibo(n) = fibo(n+2) -fibo(n+1),​
ce qui donne
fibo(-1) = fibo(1) - fibo(0) = 1
fibo(-2) = fibo(0) - fibo(-1) = -1
fibo(-3) = fibo(-1) - fibo(-2) = 2
fibo(-4) = fibo(-2) - fibo(-3) = -3
etc.​
et se résume par :
Pour tout n<0, fibo(n) = -fibo(-n)*(-1)^(n mod. 2)
D'où le code :
Code:
[COLOR="DarkSlateGray"][B]Function fibo(n As Integer) As Double
   fibo = -fibN(Abs(n)) * Sgn(n) ^ (n Mod 2)
End Function

Private Function fibN(n As Integer) As Double
   If n > 1 Then fibN = fibN(n - 1) + fibN(n - 2) Else fibN = n
End Function[/B][/COLOR]
valable pour tout entier.
On peut certainement construire une extension aux valeurs non-entières, mais c'est une autre histoire, un peu plus compliquée.

Cette dernière affirmation peut sembler téméraire, mais on connait d'autres exemples d'extension aux nombres réels de définitions qui ne semblent pouvoir s'appliquer a priori qu'à des entiers. Par exemple la fonction Γ qui coïncide avec la factorielle définie sur les entiers positifs : pour x entier, on a Γ(x+1) = x !
ROGER2327
#3353


9 Floréal An CCXVIII
2010-W17-3T20:07:12Z
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 351
Membres
103 824
dernier inscrit
frederic.marien@proximus.