我需要编写带有递归的因式分解计算器,以学习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);” 在崩溃之前。
答案 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());
}
}
}