2015-04-15 37 views
0

一個正整數n,寫爲n的階乘!定義爲:任何人都可以幫助找出這個遞歸2.7 python代碼?

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)的階乘。使用遞歸(見文第6.3節),找到任何正整數的階乘(包括0)

  • 打印階乘
  • 選項2向此作業提交一份Word文檔(版本2010或更早版本),其中包含程序的源代碼和使用這兩種選項運行的屏幕截圖,並且對於每個選項,使用0,9和-4。你會需要的d來定義一個函數來執行這個任務,使用遞歸 不要嘗試這個數字太大---這可能會產生一個錯誤,因爲它需要執行的內存

    我似乎已經想出瞭如何做功能;然而,我似乎無法讓他們在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() 
    

    如果有人可以幫助我弄清楚了這一點,我將不勝感激它!謝謝!

    +0

    你到底在問什麼? 「似乎無法讓他們工作」是什麼意思? – GreenAsJade

    +0

    當我運行我的程序時,Menu()函數執行;但是,在輸入1或2後,我的程序返回(Traceback(最近呼叫最後一個): 文件「C:/ Users/user/Documents/Prjct4」,第59行, main() 文件「 /用戶/用戶/文檔/ Prjct4「,第54行,主 num = factorial() UnboundLocalError:賦值之前引用的局部變量'factorial' – BHR77

    +0

    @ BHR77在factorial = recur_factorial行中更改變量名'factorial' ()'不匹配函數的名字 – halex

    回答

    1

    你的程序中有很多錯誤。

    但是,首先導致問題的是在main代碼中,您正在給一個名爲factorial的變量賦值。但是階乘應該是一個函數 - 根據您之前的定義。無論如何,你爲什麼要將結果分配給一個變量?你什麼也不做。也許你的意思是print factorial(num)

    您遇到的下一個問題是您在所有地方都有未初始化的變量。我從你評論中的回溯中假設你改變了主代碼,將num代入factorial - 如factorial(num)。但你期望num從哪裏得到它的價值?

    你有一些代碼(兩次)要求用戶輸入值爲num,但它在一個永遠不會執行的地方 - 在return之後。

    在調用階乘函數之前,您的意思可能是您的代碼在main

    +0

    這就是我現在...你認爲你可以幫助我嗎?(檢查編輯) – BHR77

    +0

    看來,我的答案回答你的問題 - 你好:)你得到一個問題每...在堆棧溢出問題:)正常的事情是標記答案爲「接受」,當它已經回答你的問題,並提出一個新的問題,如果你有一個新問題。否則,每個人都會感到困惑,如果你繼續編輯原始問題......很高興在下一個問題上提供幫助。記得清楚描述你的問題。此外,它還可以幫助您將代碼縮減爲導致問題的最小代碼:這是我找到您的第一個問題所做的。 GL。 – GreenAsJade

    +0

    順便說一句,它看起來像你的新程序正在爲普通算法工作,但忘記0的階乘是1,而不是0,'在recur_factorial'中。你可以通過放置'print'來解決這個問題。我回過頭來看,在你從'recur_factorial'返回的兩個地方,「n,」的階乘是「<你返回的任何東西>」。你會看到在遞歸的底部,你返回零。零時間任何東西都是零。這只是recur_factorial中兩個錯誤中的一個,但我相信您可以使用相同的打印語句找到另一個錯誤。 – GreenAsJade

    相關問題