2017-10-10 6 views
0
### Run the code below and understand the error messages 
### Fix the code to sum integers from 1 up to k 
### 

def f(k): 
    return f(k-1) + k 
print(f(10)) 

Je suis confus sur la façon de corriger ce code tout en utilisant récursion, je continue à recevoir les messages d'erreur
[ligne précédente répétée 995 fois plus] RecursionError: Profondeur maximale de récursivité a dépassé Existe-t-il un moyen simple de résoudre ce problème sans utiliser de boucle while ou créer plus d'une variable?Python récursion infinie avec la formule

+0

Cette fonction s'appelle toujours elle-même, ce qui entraîne une récursion infinie. À un moment donné, une valeur réelle devrait être retournée. Dans ce cas, il faut de la magie if-then-else. ;) – Dekker

Répondre

1

Habituellement, un récursion aurait un termination condition, à savoir le base case. Lorsque votre variable atteint cette valeur plus aucun appel de fonction récursive. par exemple. dans votre code,

def f(k): 
    if(k == 1): 
     return k 
    return f(k-1) + k 
print(f(10)) 

nous définissons le cas de base 1, si vous voulez prendre la somme des valeurs de n à 1. Vous pouvez mettre un autre numéro, il positif ou négatif, si vous voulez que la somme étendre jusqu'à ce nombre. par exemple. peut-être que vous voulez prendre la somme de n à -3, alors le cas de base serait k == -3.

0

Python n'a pas de récursion de queue optimisée. Vous f appel de fonction k temps. Si k est très grand nombre alors Python trows RecursionError. Vous pouvez voir quelle est la limite de récursion via sys.getrecursionlimit et changer via sys.setrecursionlimit. Mais changer de limite n'est pas une bonne idée. Au lieu de changer, vous pouvez changer la logique ou le motif de votre code.

0

Votre récursivité ne se termine jamais. Vous pouvez essayer:

def f(k): 
    return k if k < 2 else f(k-1) + k 
print(f(10))