C# 数的负指数

C# 数的负指数,c#,math,C#,Math,我制作了这个程序,用递归法求任意数的幂,它是有效的,但我还需要求出该数的负幂,例如,我的基数为2,指数为-3,所以结果为0.125, 我该怎么办 public static int power(int x, int n ) { if (n < 0) { Console.WriteLine("invalid"); return 0; }

我制作了这个程序,用递归法求任意数的幂,它是有效的,但我还需要求出该数的负幂,例如,我的基数为2,指数为-3,所以结果为0.125, 我该怎么办

public static int power(int x, int n )
        {
            if (n < 0)
            {
                Console.WriteLine("invalid");
                return 0;
            }
            else if (n == 1)
            {
                return x;
            }
            else if (n == 0)
            {
                return 1;
            }
            else
            {
                return x * power(x, n - 1);
            }
        }

        static void Main(string[] args)
        {
            Console.Write("enter the base: ");
            int x = int.Parse(Console.ReadLine());
            Console.Write("enter the power:");
            int n = int.Parse(Console.ReadLine());
            int z = power(x, n);
            Console.WriteLine(z);
        }

由于将一个数字提升为负幂的结果仅为1除以提升为非负幂的数字,因此您可以像这样更改您的方法注意,我们还需要返回一个双精度类型,因为我们处理的是分数值:

public static double power(int x, int n)
{
    if (n < 0) return 1 / power(x, -n);  // recursive call with '-n' for negative powers
    if (n == 0) return 1;
    if (n == 1) return x;
    return x * power(x, n - 1);
}
输出


IIRC我的二进制正确,-3等于1/2^3。换句话说,1/8或0.125。不幸的是,这意味着您必须返回一个浮点值。这些都与精确性和决定论有关:所以你可以像往常一样得到绝对值的幂。如果输入为负数,则返回值用于除以1,而不是立即返回。当然,如果基数为负值,事情会变得棘手。你问的问题并不清楚。如果方法返回int,则不能返回分数值。是否询问如何更改方法的返回类型?你是在问如何计算分数吗?这应该只是返回1/powerx,-n的问题,假设您已经将返回类型更改为double或float。请改进您的问题。我还将指出,n==1的情况不必要地使代码复杂化。你可以不说了。我认为效率并不是一个优先事项,因为你在这里重新发明轮子:看,它处理的情况比负指数更多。。。
public static void Main(string[] args)
{
    Console.WriteLine(power(2, -3));
    GetKeyFromUser("\nDone! Press any key to exit...");
}