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

メソッドタイプが「オブジェクト」であり、「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 に答える