私は次のコードで非常に簡単なプログラミングエクササイズを完了しています:
using System;
namespace Factorial
{
class MainClass
{
static int fives(int x) {
int r = 0;
while(x % 5 == 0) {
r++;
x /= 5;
}
return r;
}
static int z(int x) {
if (x == 1)
return 0;
else
return z (x-1) + fives (x);
}
public static void Main (string[] args)
{
int testCases = Convert.ToInt32 (Console.ReadLine ());
int[] xs = new int[testCases];
for (int i=0; i<testCases; i++)
xs [i] = Convert.ToInt32 (Console.ReadLine ());
foreach (int x in xs)
Console.WriteLine (z (x));
}
}
}
少数でも問題なく動作するようですが、例の8735373では、「セグメンテーション違反:11」と出力されます。再帰が深くなりすぎてメモリが不足したということですか?何が原因ですか?
(私はMacのMono 2.10.8でC#を実行しています。)
PS:エクササイズ自体に興味がある人がいたら、これが私の最終的な解決策です(はるかに最適化されています)。