Récursivité - Python 3

Bonjour à tous
me voilà face à un souci élémentaire de types avec Python que je ne sais pas résoudre :
# Somme des n premiers entiers naturel (3)

def somgauss3(n):
    if n>=0:
        s=n+float(somgauss3(n-1))
        return s

somgauss3(100);
Ce qui m'amène l'erreur suivante :
TypeError: float() argument must be a string or a number, not 'NoneType'
Comment lui faire comprendre que somgauss3 est de type float ?
En vous remerciant.

[Encadre ton code python avec des balises [ code] (5ème bouton par la droite au dessus de la fenêtre d'édition). Sinon ton code est illisible. AD]

Réponses

  • Je ne connais pas Python, mais dans une récursivité, il faut un critère d'arrêt. Ici, une valeur de somgauss3(0), par exemple.

    Cordialement.
  • J'ai tapé cela :
    def somgauss3(n):
        while n>=0:
            return n+somgauss3(n-1)
    
    Et il refuse une affectation de somgauss3(0)...
    Même erreur :-(

    [Encadre ton code python avec des balises [ code] (5ème bouton par la droite au dessus de la fenêtre d'édition). Sinon ton code est illisible. AD]
  • @kifton : Utilise la balise [ code ] pour écrire du code Python qui conserve l'indentation !!

    Ensuite, dans ton premier exemple, l'erreur vient du fait que lorsque n devient négatif, la fonction ne renvoie plus rien... ou plus exactement elle renvoie "None"... et cela ne peut pas s'ajouter aux valeurs précédentes.

    Dans le deuxième, c'est pareil.

    Ce que gerard0 voulait dire c'est qu'il faut toujours préciser le cas d'arrêt en renvoyant une valeur spécifique pour ce cas.

    Ici, il suffit de renvoyer 0 si n=0 (ou mieux, si n<=0) et sinon faire comme tu l'as fait.
  • C'est corrigé ! Je vous remercie tous les deux.

    Je suis sous Cantor, l'indentation ne se fait pas automatiquement par défaut. A configurer peut-être...
Connectez-vous ou Inscrivez-vous pour répondre.