0

我在简单的运动中遇到了一些问题。我必须编写一个程序,询问用户 N 的值,然后计算 N!使用递归。我写了这样的东西:

namespace ConsoleApplication19
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("This program will calculate a factorial of random number. Please type a number");
            String inputText = Console.ReadLine();
            int N = int.Parse(inputText);
            
            String outputText = "Factorial of " + N + "is: ";
            int result = Count(ref N);
            Console.WriteLine(outputText + result);
            Console.ReadKey();
        }

        private static object Count(ref int N)
        {
            for (int N; N > 0; N++)
            {
                return (N * N++);
            }
        }
    }

问题出在“int result = Count(ref N);”这一行 我不知道为什么它不能转换为int。

4

3 回答 3

10

因为它返回一个对象,并且对象不能隐式转换为 int,所以您可以做的是更改方法的签名,例如

private static int Count(ref int N)

或者你可以这样做

int result = (int)Count(ref N);

举个简单的例子

//this is what you are doing
object obj = 1;
int test = obj;   //error cannot implicitly convert object to int. Are you missing a cast?

//this is what needs to be done
object obj = 1;
int test = (int)obj; //perfectly fine as now we are casting

// in this case it is perfectly fine other way around
obj = test;  //perfectly fine as well
于 2013-08-16T17:51:05.997 回答
0

我猜是因为你的方法类型是“object”,它应该是“int”。

于 2013-08-16T17:54:21.213 回答
-2

是的,正如之前的回复所提到的,你不需要 ref,你需要返回一个 int。您的问题说您需要使用递归,但您使用的是 for 循环?

这是编写阶乘递归方法的方法:

public long Factorial(int n)
{
   if (n == 0)  //base
     return 1;
   return n * Factorial(n - 1);
}
于 2013-08-16T17:56:53.703 回答