Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Factorisation en Nombres premiers par récursivité

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jm.andryszak

XLDnaute Occasionnel
J'ai un problème de point d'arrêt dans la fonction DecompositionRecursif
que je contourne par On Error GoTo err: 'Espace pile insuffisant (Erreur 28)
Cette solution ne me convient pas vraiment.
Quelqu'un aurait-il une solution ?
Merci
Voici le code

Option Explicit
'***********************************************
Dim Facteur
'***********************************************
Function DecompositionRecursif(n As Long, i) As String
'***********************************************
Dim j
Dim Result
'**********************************************
On Error GoTo err: 'Espace pile insuffisant (Erreur 28), Pb de point d'arrêt ??
'Point d'arrêt
If n = 1 Then
Result = Mid(Facteur, 1, Len(Facteur) - 3)
Debug.Print Result
Exit Function 'End
End If
'
j = 0
While n Mod i = 0
n = n / i
j = j + 1
Wend
If j <> 0 Then
Result = i & "^" & j & " * "
End If
Facteur = Facteur & Result

err:
'Espace pile insuffisant (Erreur 28), Pb de point d'arrêt ??
'Arrêt de la récursivité
If err.Number = 28 Then
Debug.Print Facteur & n & " " & EstPremier(n)
Exit Function 'End
'Récursité
Else
DecompositionRecursif = DecompositionRecursif(n, i + 1)
End If
End Function
'***********************************************
Sub Test_DecompositionRecursif()
'***********************************************
Dim Nombre As Long
Dim Debut
'***********************************************
'Nombre = 7 * 5000000
'Nombre = 9
'Nombre = 13 * 2 * 997
'Nombre = 461 * 499987
Nombre = 3 * (152311 + 3 ^ 1 * 19 ^ 1 * 89 ^ 1 * 1607)
Debug.Print Nombre
Facteur = ""
Debut = Timer
DecompositionRecursif Nombre, 2
Debug.Print "fin " & Timer - Debut
End Sub
'***********************************************
 
Merci beaucoup
j'ai testé la fonction D, un peu lent pour un nombre comme
24913866 (2*3*4152311) mais là n'est pas la question.
La nuit portant conseil j'ai trouvé mon oubli, il manquait un autre point d'arrêt à la récursivité.
J'ai modifié comme ceci et ça fonctionne.
(la fonction EstPremier comme son nom l'indique vérifie si n est premier)

'Premier point d'arrêt
If n = 1 Then
Result = Mid(Facteur, 1, Len(Facteur) - 3)
Debug.Print Result
Exit Function 'End

'Deuxième Point d'arrêt, plus d'erreur Espace pile insuffisant (Erreur 28)
ElseIf EstPremier(n) Then
Debug.Print Facteur & n
Exit Function 'End
End If
temps d'exécution : 0,0098 sec.

Merci encore A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
517
Réponses
3
Affichages
546
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…