简体   繁体   English

RecursionError:超过最大递归深度

[英]RecursionError: maximum recursion depth exceeded

I'm working on building a python script to solve Riemann's Paradox. 我正在构建一个Python脚本来解决黎曼悖论。 The idea is to take an inputted number, and add or subtract 1/2,1/3,1/4,1/5... to/from 1 until you have the inputted number. 这个想法是取一个输入的数字,然后对1进行加,减1 / 2、1 / 3、1 / 4、1 / 5 ...,直到获得输入的数字。 I'm running into the Recursion Error as a result of calling back to my comparison and adding/subtracting classes every time a comparison is made. 由于遇到回调并每次进行比较时都添加/减去类,因此我遇到了递归错误。

My code is as follows: 我的代码如下:

import math
#declare values of variables before they are referenced
goal = float(input("What number are you trying to achieve?"))
current_number = float(1)
negatives = (2)
positives = (3)
#-----------------------------------------------------
def add(goal,current_number,positives,negatives): #define the add operation for when the current number is less than the goal
    current_number = current_number+(1/positives) #add current fraction to the current number
    positives = positives+2 #Set the next additional fraction
    comparison(goal,current_number,positives,negatives) #go to comparision of the current number to the goal

def subtract(goal,current_number,positives,negatives): #define the subtract operation for when the current number is greater than the goal
    current_number = current_number-(1/negatives) #subtract current fraction from the current number
    negatives = negatives+2 #set the next subtractional fraction
    comparison(goal,current_number,positives,negatives) #go to comparision of the current number to the goal

def comparison(goal,current_number,positives,negatives): #define comparison between the current number to the goal
    if current_number < goal:
        add(goal,current_number,positives,negatives) #if the current number is less than the goal, go to add the next fraction to it
    if current_number > goal:
        subtract(goal,current_number,positives,negatives) #if the current number is greater than the goal, do to subtract the next fraction from it
    if current_number == goal:
        print("The equation for your number is 1+1/3...")
        print("+1/",positives)
        print("...-1/2...")
        print("-1/",negatives)
        #if the current number is equal to the goal, print the results

comparison(goal,current_number,positives,negatives) #do the comparison between the current number and the goal

I'm wondering what I can do to solve this problem. 我想知道如何解决这个问题。

  1. In current_number == goal you are comparing floats and using == is often not the right way to do it . current_number == goal您正在比较浮点数,使用==通常不是正确的方法

  2. You may want to increase the maximum recursion depth . 您可能需要增加最大递归深度

  3. Add print(current_number) as the first line of the comparison() function and see how your current_number converges to/diverges from the goal. print(current_number)添加为print(current_number) comparison()函数的第一行,并查看您的current_number如何收敛到目标或偏离目标。

You don't need a function for add and subtract because adding a negative is the same as subtracting. 您不需要加法和减法函数,因为加负数与减法相同。

Also I have fixed your code, calling a function which the calls the function you called it from was what was causing your recursion error. 另外,我已经修复了您的代码,调用了一个函数,该函数导致您的递归错误。

Hope this helps you :) 希望这对您有所帮助:)

import math
goal = float(input("What number are you trying to achieve?"))

current_number = 0
fraction = 2
#-----------------------------------------------------
def change(goal, current_number, fraction, sign = 1): #define the add operation for when the current number is less than the goal
    global positives
    current_number = current_number + (1/fraction) * sign # add or take away current fraction to the current number
    return current_number

def comparison(goal, current_number, fraction): #define comparison between the current number to the goal
    print("The equation for your number is:")
    print("1/2")
    while round(current_number, 3) != round(goal, 3): # you don't have to round if you don't want to
        fraction = fraction + 1
        if current_number < goal:
            print("+1/"+str(fraction)) # positive
            current_number = change(goal, current_number, fraction) #if the current number is less than the goal, go to add the next fraction to it
        elif current_number > goal:
            print("-1/"+str(fraction)) # positive
            current_number = change(goal, current_number, fraction, -1)
    print("...")

comparison(goal,current_number, fraction) #do the comparison between the current number and the goal

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM