有人能帮我弄清楚这个递归2.7python代码吗?

2024-04-26 21:16:18 发布

您现在位置:Python中文网/ 问答频道 /正文

正整数n的阶乘,写为n!,定义为:

n*(n-1)(n-2)…*1 如果n是0n!定义为1 如果n是负的,n!未定义

例如: 12个!=12*11*10*9*8*7*6*5*4*3*2*1

编写一个程序 1从用户输入一个正整数。如果整数不是正,则显示错误消息 2提示用户通过顺序编程(选项1)或递归(选项2)计算阶乘

选项1: 使用一种自顶向下的迭代方法(例如while,for)找到任何正整数(包括0)的阶乘。在

选项2: 使用递归(见6.3节),找到任何正整数(包括0)的阶乘

  1. 打印阶乘

为此作业提交一个Word文档(2010版或更早版本),其中包含程序的源代码和运行该程序的屏幕截图,每个选项都有0、9和-4

提示: 您需要定义一个函数来使用递归来执行此任务 不要用太大的数字来尝试这个操作,因为它需要内存来执行,否则可能会产生错误

我似乎已经知道如何实现这些函数;但是,我似乎无法让它们在main()函数中工作。在

当我运行我的程序时,Menu()函数会执行;但是,在我输入1或2之后,我的程序返回

(Traceback (most recent call last): File "C:/Users/user/Documents/Prjct4", line 59, in <module> main() File "C:/Users/user/Documents/Prjct4", line 54, in main num = factorial() UnboundLocalError: local variable 'factorial' referenced before assignment)

以下是我目前掌握的情况:

def Menu():
    print
    print ("For Sequential Programming Calculator, Enter 1")
    print ("For Recursion Calculator, Enter 2")
    print
    while True:
        choice = input("Enter your choice here: ")
        if (choice >= 1) and (choice <=2) and (int(choice)==choice):
            return choice
        else:
            print ("Invalid Choice! Please enter 1 or 2")


def factorial():
    num = 1
    while n >= 1:
        num = num * n
        n = n - 1
    return num
    num = int(input("Enter a number: "))

    if num < 0:
        print("Sorry, factorial does not exist for negative numbers")
    elif num == 0:
        print("The factorial of 0 is 1")
    else:
        print "The factorial of",num,"is",factorial(num)


def recur_factorial():
    if n == 1:
        return n
    else:
        factorial= n*recur_factorial(n-1)
    return factorial
    num = int(input("Enter a number: "))

    if num < 0:
       print("Sorry, factorial does not exist for negative numbers")
    elif num == 0:
       print "The factorial of 0 is 1"
    else:
       print "The factorial of",num,"is",recur_factorial(num)


def main():
    print
    print("Factorial Calculator")
    print
    while True:
        choice = Menu()
        if choice == 1:
            num = factorial()
        elif choice == 2:
            factorial = recur_factorial()


main()

如果有人能帮我解决这个问题,我将不胜感激!谢谢您!在


Tags: 函数程序returnifmaindef选项else
1条回答
网友
1楼 · 发布于 2024-04-26 21:16:18

你的程序有很多错误。在

然而,首先给您带来问题的是在main代码中,您将一个值赋给一个名为factorial的变量。但阶乘应该是一个函数,正如你之前的定义。你为什么要把结果赋给一个变量?你什么都不用做。也许你是说print factorial(num)。在

您遇到的下一个问题是到处都是未初始化的变量。根据您注释中的回溯,我假设您更改了main中的代码,将num转换为factorial-类似factorial(num)。但是您希望num从哪里获得它的值呢?在

您有一些代码(两次)要求用户为num提供一个值,但是它位于一个永远不会被执行的地方——在函数中的return之后。在

也许您的意思是在调用阶乘函数之前,这段代码应该在main中?在

相关问题 更多 >