任何人都可以帮助找出这个递归 2.7 python 代码吗?
Could anyone help figure out this recursion 2.7 python code?
正整数 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)的阶乘
- 打印阶乘
向此作业提交包含程序源代码和屏幕截图的 Word 文档(2010 版或更早版本)运行将其与两个选项一起使用,并为每个选项添加 0、9、和 -4
提示:
您将需要定义一个函数来使用递归执行此任务
不要用太大的数字来尝试这个——这可能会因为执行需要的内存而产生错误
我似乎已经想出如何实现这些功能了;但是,我似乎无法让它们在 main() 函数中工作。
当我运行我的程序时,Menu()函数执行;但是,在我输入 1 或 2 之后,我的程序 returns
(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()
如果有人能帮我解决这个问题,我将不胜感激!谢谢!
你的程序有很多错误。
但是,第一个给您带来问题的是,在您的 main
代码中,您正在为名为阶乘的变量赋值。但是阶乘应该是一个函数——按照你之前的定义。为什么无论如何都要将结果分配给变量?你什么都不用做。也许你的意思是 print factorial(num)
.
您遇到的下一个问题是到处都是未初始化的变量。我假设,根据您评论中的回溯,您更改了 main 中的代码以将 num
传递到 factorial
- 如 factorial(num)
。但是您希望 num
从哪里获得它的价值?
您有一些代码(两次)要求用户输入 num
的值,但它位于永远不会执行的位置 - 在函数中的 return
之后.
也许您的意思是让这段代码在 main
中,然后再调用阶乘函数?
正整数 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)的阶乘
- 打印阶乘
向此作业提交包含程序源代码和屏幕截图的 Word 文档(2010 版或更早版本)运行将其与两个选项一起使用,并为每个选项添加 0、9、和 -4
提示: 您将需要定义一个函数来使用递归执行此任务 不要用太大的数字来尝试这个——这可能会因为执行需要的内存而产生错误
我似乎已经想出如何实现这些功能了;但是,我似乎无法让它们在 main() 函数中工作。
当我运行我的程序时,Menu()函数执行;但是,在我输入 1 或 2 之后,我的程序 returns
(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()
如果有人能帮我解决这个问题,我将不胜感激!谢谢!
你的程序有很多错误。
但是,第一个给您带来问题的是,在您的 main
代码中,您正在为名为阶乘的变量赋值。但是阶乘应该是一个函数——按照你之前的定义。为什么无论如何都要将结果分配给变量?你什么都不用做。也许你的意思是 print factorial(num)
.
您遇到的下一个问题是到处都是未初始化的变量。我假设,根据您评论中的回溯,您更改了 main 中的代码以将 num
传递到 factorial
- 如 factorial(num)
。但是您希望 num
从哪里获得它的价值?
您有一些代码(两次)要求用户输入 num
的值,但它位于永远不会执行的位置 - 在函数中的 return
之后.
也许您的意思是让这段代码在 main
中,然后再调用阶乘函数?