当前位置: 首页 > 知识库问答 >
问题:

Python递归操作

公西季
2023-03-14
main_program = True


def program():
    print('Hello user, please enter a value to choose an option')
    print('select 1 to find the sum of two number')
    print('select 2 to find the product two number')
    print('select 3 to raise a number to a power')
    print('4 to find the reminder two number')
    print('select q for exit')

    choice = input('human enter a value: ')

    global main_program
    while main_program:
        if(choice == '1'):
            sum_of_numbers()

        elif(choice == '2'):
            product_of_numbers(*get_information())

        elif(choice == '3'):
            esponent_of_numbers(*get_information())

        elif(choice == '4'):
            modulo_of_numbers(*get_information())

        elif(choice == 'q'):
            print('program terminated')
            main_program = False
        else:
            print('wrong value entered')


def get_information():
    while True:
        try:
            x = float(input('human enter a value: '))
            y = float(input('human enter second value: '))
            return x, y
        except ValueError:
            print('my processors cannot understand the inputs')


def sum_of_numbers():
    x, y = get_information()
    sum = x + y
    print(sum)
    program()


def product_of_numbers(x, y):
    if(x < y):
        print(product_of_numbers(y, x))
        program()
    if(x == 0):
        print(0)
        program()
    else:
        print(x + product_of_numbers(x, y-1))
        program()


def esponent_of_numbers(x, y):
    if y == 0:
        print(1)
        program()
    elif y % 2 == 0:
        print(esponent_of_numbers(x, y / 2)**2)
        program()
    else:
        print(x * esponent_of_numbers(x, y-1))
        program()


def modulo_of_numbers(x, y):
    if x < y:
        print(x)
    print(modulo_of_numbers(x - y, y))
    program()


program() 

拜托,我需要你的帮助。我花了几个小时试图找出这些函数中的问题。我的老师想让我用一个递归运算给定2个数字。问题是,每次我启动程序并初始化函数时,都会出现这个错误。“RecursionError:调用Python对象时超过了最大递归深度”我没有使用位号,而是使用了StackOverflow中关于同一参数的其他答案中的代码。所以我想我真的没有掌握这个问题的概念:

如果用户在主菜单输入“1”:应该提示用户输入两个数字,两个数字的求和(加法)将被打印到屏幕上。要计算这个值,您应该创建一个带有以下签名的函数,其中x和y可以是整数或浮点类型,它返回答案:和(x,y)。如果用户在主菜单输入“2”:应该提示用户输入两个正数x和y,两个数字的乘积将被打印到屏幕上。两个数字的乘积可以表示为重复的加法操作。例如,54=20;这可以用另一种方式计算为(5 5 5)=20。要计算此值,您应该创建一个具有以下签名的函数,其中x是int或浮点数,y是int,返回答案:prod(x, y)。如果用户在主菜单中输入“3”:应提示用户输入两个正数,

共有1个答案

锺离飞飙
2023-03-14

以下是我在您的原始代码中发现的一些改进:

    < li >(错误的主要原因)您没有指定循环应该停止的时间。例如,在两个数的乘积中,< code > print(x product _ of _ numbers(x,y-1))实际上无限地继续下去,因为您没有告诉循环在< code>y的某个值处停止。 < li >您的程序永远不会停止,因为您没有在循环中的< code>main_program上指定条件。 < li >(个人视图)每次选定的操作完成后,程序应允许用户选择他想做的新操作。

下面是我使用的修改后的代码,它运行良好:

# This program works only for positive values
main_program = True
def program():
    print('Hello user, please note that this program works only for positive values.')
    print('select 1 to find the sum of two number')
    print('select 2 to find the product two number')
    print('select 3 to raise a number to a power')
    print('select 4 to find the reminder two number')
    print('select q for exit')

    choice = input('human select operation: ')
    global main_program
    if(choice == '1'):
        print(sum_of_numbers())

    elif(choice == '2'):
        print(product_of_numbers(*get_information())-1)
    
    elif(choice == '3'):
        print(esponent_of_numbers(*get_information()))

    elif(choice == '4'):
        modulo_of_numbers(*get_information())

    elif(choice == 'q'):
        print('program terminated')
        main_program = False
    else:
        print('wrong value entered')


def get_information():
    while True:
        try:
            x = float(input('human enter first value: '))
            y = float(input('human enter second value: '))
            return x, y
        except ValueError:
            print('my processors cannot understand the inputs')


def sum_of_numbers():
    x, y = get_information()
    return x + y

def product_of_numbers(x, y):
    if(x < y):
        return product_of_numbers(y, x)
    if(x == 0):
        print('first value is equal to 0, result:', x*y)
        return 1
    else:
        if y==0:
            print('End of calculation')
            return 1
        else:
            res = x + product_of_numbers(x, y-1)
            return res

def esponent_of_numbers(x, y):
    if y == 0:
        print('End of calculation')
        return 1
    elif y % 2 == 0:
        res = esponent_of_numbers(x, y / 2)**2
        return res
    else:
        res = x * esponent_of_numbers(x, y-1)
        return res

def modulo_of_numbers(x, y):
    if x<y:
        print('End of calculation')
        print('The result is: ', x)
        return 1
    if y < x:
        res = modulo_of_numbers(x - y, y)
        return res

while main_program==True:
    program()

您鼓励在product_of_numersmodulo_of_numbers中处理负值的情况。为这两个或类似内容的用户条目添加约束。

祝你好运

 类似资料:
  • 本文向大家介绍JavaScript递归操作实例浅析,包括了JavaScript递归操作实例浅析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了JavaScript递归操作。分享给大家供大家参考,具体如下: 问题 一个简单的递归,求n的阶乘: 如果像下面这样使用它,则会出错: 因为fcopy指向的函数实体调用了factorial,而factorial已经被释放。 解决的办法 使用argume

  • 问题内容: “编写一个递归函数“ listSum”,该函数接受一个整数列表并返回列表中所有整数的和。” 例: 我知道如何以其他方式执行此操作,但不是以递归方式执行。 我需要执行此操作的基本方法,因为不允许使用特殊的内置函数。 问题答案: 每当遇到这样的问题时,请尝试使用相同的函数表示该函数的结果。 在你的情况下,你可以通过将第一个数字与在列表中其余元素上调用同一函数的结果相加来获得结果。 例如,

  • 问题内容: 我已经为C中的驱动程序开发了一个DLL。我用C ++编写了一个测试程序,并且DLL可以正常工作。 现在,我想使用Python与该DLL进行交互。我已经成功隐藏了大多数用户定义的C结构,但是有一点我必须使用C结构。我是python的新手,所以我可能会出错。 我的方法是使用ctype在python中重新定义一些结构,然后将该变量传递给我的DLL。但是在这些类中,我有一个自定义链接列表,其中

  • 我对函数式编程很陌生,尤其是下面使用的Scheme。我正在尝试使以下函数是递归的,尾递归的。基本上,该函数的作用是对两个字符串的对齐方式进行评分。当给定两个字符串作为输入时,它会比较每个“列”字符,并根据在称为 scorer 的函数中实现的评分方案(由下面的代码中的函数调用)来累积该对齐的分数。 我有一个想法,用一个帮助函数来累积分数,但我不太确定如何去做,因此我该如何让下面的函数尾递归呢?

  • 我试图写一个程序,找出给定的数字是否在斐波那契序列中,我不断得到不终止的递归,我不知道为什么。第17行似乎是个大问题。当我输入0或1时,我会得到想要的答案。我只是在寻找答案,我正在努力学习,所以仅仅告诉我答案对我没有多大帮助。

  • 考虑Python中的这个基本递归: 根据斐波那契数列的(n-1)(n-2)函数,这是有道理的。 Python如何执行包含另一个递归的递归,这个递归不在同一代码行内,而是在同一代码行内?“finobacci(number-1)”是否完成所有递归,直到它到达“1”,然后它对“fibonacci(number-2)”做同样的事情,并将它们相加? 作为比较,下面的递归函数将一个数“x”提升为“y”的幂,我