任何人都可以帮助弄清楚这个递归2.7 python代码?

时间:2015-04-15 04:31:38

标签: python python-2.7 recursion factorial

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

N *(N-1)的第(n-2) ... * 1 如果n是0 n!定义为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. 打印factorial
  2. 向此作业提交一个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()
    

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

1 个答案:

答案 0 :(得分:1)

你的程序中有很多错误。

但是,首先导致问题的是,在main代码中,您要为名为factorial的变量赋值。但是,因子应该是一个函数 - 根据你之前的定义。为什么要将结果分配给变量?你不做任何事情。也许你的意思是print factorial(num)

您遇到的下一个问题是您在整个地方都有未初始化的变量。我假设您在评论中的回溯中更改了main中的代码,以便将num传递到factorial - 就像factorial(num)一样。但是你希望num从哪里获得它的价值?

你有一些代码(两次)要求用户提供num的值,但是在你的函数return之后,它会永远不会被执行。< / p>

也许你的意思是在调用阶乘函数之前这段代码在main