Ce code provient d'un quiz en ligne pour Python. La réponse sur le site Web est donnée sous forme de 0. Je ne comprends pas la réponse donnée dans le quiz. Selon ma compréhension, la réponse devrait être (1,1).
def func(x, ans):
if(x==0):
return 0
else:
return func(x-1, x+ans)
print(func(2,0))
4 Réponses :
comment diriez-vous ci-dessous le code? P> Retour 0 CODE> CARE FUNC CODE> Retourne toujours 0 code>.
En outre, cette fonction ne peut pas retourner (1,1) code>, son type de retour est numéro
def func(x, ans):
print(x, ans)
if(x==0):
return 0
else:
return (x-1, x+ans) #updated
print(func(2,0))
#Output: (1, 2)
Itération 0: x = 2, ans = 0; Va à la déclaration "sinon", maintenant, x = 1, ans = 2. P>
itération 1: x = 1, ans = 1; Va à la déclaration "sinon", maintenant, x = 0, ans = 3. P>
itération 2: x = 0, ans = 3; Va à la déclaration 'Si', retourne de la fonction donnant la sortie '0' p>
Un moyen de suivre ce qui se passe est d'ajouter quelques instructions code> imprimer code> dans votre définition de fonction - puis exécutez la fonction imprimer (func (2,0)) code> et voir quelles valeurs sont imprimées p> p>
Si vous voulez savoir comment fonctionne du code, une bonne pratique consiste à simplement passer à travers la ligne de la ligne. Donc, avec cette fonction qui serait:
en premier, la fonction vérifie si son entrée si La fonction s'appelle elle-même avec la valeur Donc, en bref, la fonction ne pourra peut-être pas retourner Donc, vous pensez que la valeur retournée du mais comme dit, ce n'est pas vrai. Les valeurs ne sont pas calculées de cette façon, ce ne sont que des paramètres donnés à la fonction afin de pouvoir les traiter à l'intérieur. x code> est égale à 0 code> . Si c'est le cas, il renvoie 0 code> et en revenant également que la fonction est terminée. P> x code> x code> n'est pas égal à 0 code>, l'instruction IFR renvoie false code>, résultant dans la fonction pour passer aux lignes suivantes: p> x code> diminuée par 1 code>. Nous voyons donc que cette fonction est en fait une fonction récursive (plus sur les fonctions récursives ici A > et ici ). Le deuxième paramètre de FUNC code> est la valeur ANS code> donnée à la fonction d'origine ajoutée à la valeur x code>. C'est la seule survenue de la variable code> ans code>, ce qui signifie qu'il n'a aucune signification dans la fonction elle-même.
Maintenant, en appelant la fonction avec la valeur réduite x code>, il vérifiera à nouveau si cette valeur est égale à 0 code>. S'il s'agit, il retournera 0 code>, ce qui signifie que la fonction func code> appelée cette nouvelle fonction code> FUNC code> retournera également 0 code >. Ou il appellera à nouveau la fonction Func code> avec une valeur réduite code> x code>. Il le fera jusqu'à ce que la valeur x code> devienne 0 code>.
Cela signifie alors que la seule valeur qui sera jamais renvoyée à partir de cette fonction est 0 code>. P> 0 < /code.com.Pourquoi pas (1,1) h1>
Func code> sera (1 , 1) code>. Si vous ne savez pas quelle est la fonction, je pense que je comprends pourquoi vous pensez que cela se produira. Je suppose que avec ces paramètres dans la déclaration de retour de la fonction: p> x code> sera diminué par un, ce qui le fait 1 code> (lorsque l'entrée est (2, 0) code>), car 2 - 1 = 1 code>. Et en utilisant ce x code> dans x + ans code>, fait 1 + 0 = 1 code>. Entraînant une valeur retournée de (1,1) code>. P>
De plus, comme dit, la fonction ne retournera que 0 code>, qui est un entier. Cela rend impossible de renvoyer un type de tuple comme (1,1) code>. P> p>
La réponse est 0. Temps pour que vous fassiez la raison pour laquelle. (PS, un bon moyen de valider les réponses, il suffit de l'exécuter!)
Retour 0 CODE> CAREFUNC CODE> Retourne toujours0 code>. En outre, cette fonction ne peut pas retourner(1,1) code>, son type de retour est numéro.Pourriez-vous donner le raisonnement pourquoi vous pensez que cela revient (1,1)?
Vous avez probablement manqué l'appel de func récursif