C#阶乘计算的“如何解决”逻辑

时间:2019-07-07 03:58:06

标签: c#

我需要编写带有递归的因式分解计算器,以学习nLog以及如何构建自定义异常。

我已经在Visual Studio 2019 CE中尝试了几种不同的实现,包括“ if”和“ for”循环,但我真的不知道自己在做什么。

   public static int Factorial(int input)
        {


            try
                {
                // create a count for step of recursion

                int factorCount = 0;
                int sqrt = (int)Math.Ceiling(Math.Sqrt(input));

              for (int step=1; step<=sqrt;step++)
                {
                    if(input % step == 0) {

                        //incress the current step of recursion by one 
                        factorCount++;
                        Console.WriteLine("Calculator.Factorial:Calculating",step);

                    }
                        Console.WriteLine(input);
              }

当前代码抛出一个  “由于StackOverflowException,进程已终止。”并且至少可以做到“ Console.WriteLine(” Calculator.Factorial:Calculating“,step);” 在崩溃之前。

1 个答案:

答案 0 :(得分:1)

您根本没有在代码中使用递归。递归表示函数本身在内部进行调用。阶乘你为n!您必须计算(n-1)!直到n-1 = 1。试试这个:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {

        static int Fact(int n)
        {
            if (n <= 1)
                return 1;
            return n * Fact(n - 1);
        }

        static int Factorial(int n)
        {
            if (n <= 1)
                return 1;
            int result = 1;
            for (int i = 2; i <= n; i++)
            {
                result = result * i;
            }
            return result;
        }


        static void Main(string[] args)
        {
            Console.Write("Enter a Number to find factorial: ");
            int n = Convert.ToInt32(Console.ReadLine());
            int r = Fact(n);
            Console.WriteLine(n.ToString() + "! = " + r.ToString());

            Console.Write("Enter a Number to find factorial: ");
            n = Convert.ToInt32(Console.ReadLine());
            r = Factorial(n);
            Console.WriteLine(n.ToString() + "! = " + r.ToString());           
        }
    }
}