2012-07-27 83 views
1

內的幾秒鐘後,將下面的程序輸出拋出異常匿名遞歸函數

過程由於終止StackOverflowException

代替我的消息。爲什麼?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Numerics; 

namespace maximumVariable 
{ 
    class Program 
    { 

     public static BigInteger Factorial(int num) 
     { 
      try 
      { 
       return (num > 1) ? num*Factorial(num - 1) : (1); 
      } 
      catch 
      { 
       throw; 
      } 
     } 


     static void Main(string[] args) 
     { 
      BigInteger kingKong=0; 
      int facParameter=0; 
      try 
      { 

       while (true) 
       { 
        kingKong = Factorial(facParameter); 
        facParameter++; 
       } 

      } 
      catch 
      { 
       Console.WriteLine("The maximum value " + kingKong.ToString()+"has been achieved after "+facParameter.ToString()+" iterations"); 
      } 


     } 
    } 
} 
+1

附註:在「Factorial」中捕捉和重擲的點是什麼? (忽略你無法捕獲StackOverflowException的事實) – 2012-07-27 20:15:55

+0

[C#捕獲堆棧溢出異常]的可能重複(http://stackoverflow.com/questions/1599219/c-sharp-catch-a-stack-overflow-exception ) – 2012-07-27 20:16:58

+0

@BrianRasmussen此源代碼應該不言自明;我想檢查BigInteger可以包含的最大因子。 – 0x6B6F77616C74 2012-07-27 20:23:40

回答

1

從MSDN:

與.NET Framework 2.0版開始,StackOverflowException對象不能由try-catch塊捕獲和相應的過程由默認終止。因此,建議用戶編寫代碼來檢測和防止堆棧溢出。例如,如果您的應用程序依賴於遞歸,請使用計數器或狀態條件來終止遞歸循環。

所以你不能再捕捉到這個例外。