返回最小除数的递归函数

Fun*_*zer 3 c# recursion

我写了一个函数,递归计算整数n> 1的最小除数:

using System;                   
public class Program
{
    public static void Main()
    {
        int n = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(SmallestDivisor(n));
    }

    public static int SmallestDivisor(int n)
    {
        return SmallestDivisor(n, 2);
    }

    public static int SmallestDivisor(int n, int d)
    {
        if (n%d == 0)
            return d;
        else  
            return SmallestDivisor(n, d+1);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的目标是构建一个递归函数,只接受整数n作为参数.是否有任何可能的替代方法来避免调用另一个辅助函数作为参数整数n和d?

Sla*_*jic 6

没有必要使用2种方法就足够了:

static void Main(string[] args)
{
    int n = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(SmallestDivisor(n));
}

public static int SmallestDivisor(int n, int d=2)
{
    if (n % d == 0)
        return d;
    return SmallestDivisor(n, ++d);
}
Run Code Online (Sandbox Code Playgroud)

该参数d是optinal,因为它具有默认值,2您可以调用方法SmallestDivisor(n).如果你想要d传递给方法的另一个值,只需调用SmallestDivisor(n,d).