Jump to content

Calculs récursifs


FabienDespascito
Go to solution Solved by Shrex,

Recommended Posts

  • Élu Etudiant

Salut les pros de l'informatique (aka @DuTACKauTac )

Je me décide enfin de rattraper mon retard en Info 

 

Dans calculs récursifs lorsque je rentre ce code :

Révélation

from printer import *
resultat = 1
def factorielle(depart):
    if depart == 0:
        return
    resultat *= depart
    factorielle(depart - 1)
    
    
    
nombre = int(input())
factorielle(nombre)
print(resultat)

Ils me disent UnboundLocalError: local variable 'resultat' referenced before assignment on line 6

Je comprends pas l'erreur.

 

Je sais que c'est pas la correction du prof, mais j'aimerais savoir la signification de cette erreur que je retrouve souvent en plus

 

Merci

Link to comment
Share on other sites

  • Solution

J'ai une idée mais je suis pas sûr

En fait quand tu utilises une variable dans ta fonction (ici resultat), il faut qu'elle soit assigné dans la fonction et pas en dehors

Genre "def factorielle(depart,resultat)"

et quand t'appelles ta fonction tu mets : "factorielle(nombre,1)"  (j'ai mis 1 vu que c'est ce que tu as mis au début)

Par contre je pense pas que tu puisses print(resultat) donc faut que tu explication en dessous si tu veux réfléchir

 

Révélation

dans ta fonction à la fin il faut qu'elle renvoie resultat

Donc faut que tu mettes à un certain endroit de ta fonction return resultat

Puis quand tu appelles ta fonction, tu fais directement print(factorielle(nombre,1)

 

Link to comment
Share on other sites

  • Élu Etudiant

@ShrexOuais je pense que c'est ça 

Pendant que t'y es tu peux m'expliquer ce qu'est l'instruction return

Je ne vois pas la différence entre return 1 ou return variable

Edited by FabienDespascito
Link to comment
Share on other sites

  • Ancien du Bureau

Hey :') 

il y a 7 minutes, FabienDespascito a dit :

Je ne vois pas la différence entre return 1 ou return variable

Return te permet de renvoyer le programme 

Imaginons que tu fais :

Def addition(nombres):

    variable = nombre + nombre 

    return variable 

 

Ou si tu fais 

Def adyssion(nnombr):

    jemlinfo = nnombr + 2 

    return 1 

 

print(addition(2)) va t'imprimer 4 

print(adyssion(2)) imprimera toujours 1 

 

Tackompris ?

Link to comment
Share on other sites

En fait quand tu utilises une fonction faut bien qu'à la fin elle soit "égale" à quelque chose (qu'elle renvoie un quelque chose) : un string, un nombre, etc...

Il faut obligatoirement, si tu veux renvoyer ce quelque chose pour le print par exemple, utiliser la fonction return

 

J'étais en train de faire un exemple avec des fonctions telle que TonyTony(Chopper) mais le RM a répondu plus vite

Edited by Shrex
Link to comment
Share on other sites

  • Élu Etudiant

@Shrex@DuTACKauTac

Si je comprends bien return permet de définir le résultat d'une fonction (que l'on utilise comme une variable, genre print(fonction) ou for fonction in range) ?

Donc si on met return sans rien après, on définit la fonction comme étant nulle ?

il y a 4 minutes, Shrex a dit :

TonyTony(Chopper)

Magnifique 😍

Link to comment
Share on other sites

  • Ancien du Bureau
il y a 1 minute, FabienDespascito a dit :

on définit la fonction comme étant nulle ?

Exact, return tout court donnera Null 

Par contre le "for fonction in range" non :') 

À la limite tu pourrais faire "for loop in range(fonction)" 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...