C# - for Loop Freezes at strange intervals

前端 未结 3 1902
猫巷女王i
猫巷女王i 2021-01-23 06:53

I am working on Problem 14 on Project Euler, and my code seems to freeze at random intervals for no apparent reason.

static void Main()
{
    int maxNum = 0;
            


        
相关标签:
3条回答
  • 2021-01-23 07:25

    I've solved it in another way, by caching the result for each step, and I've found your problem. I doubt your program ever stops.
    The statement num = (3 * num) + 1 may overflow over Int32.MaxValue and result in a negative number and an infinite loop(?).
    In this case, you can solve the problem by using long for your x.

    0 讨论(0)
  • 2021-01-23 07:31

    I bet that this version doesn't freeze, there's no reason it should do that.

    The Collatz sequences before you hit 1 in the inner while loop are too short to lead to a noticeable delay, and if they would that should always happen at the same numbers.

    If you add console output inside the loop then this may allocate memory, and the pauses you see could be due to garbage collection.

    0 讨论(0)
  • 2021-01-23 07:38

    If goes into infinite loop in while (num != 1).

    0 讨论(0)
提交回复
热议问题