Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将十进制数转换为八进制数(C#)_C#_Function_Recursion - Fatal编程技术网

将十进制数转换为八进制数(C#)

将十进制数转换为八进制数(C#),c#,function,recursion,C#,Function,Recursion,我有一个将数字从十进制转换为八进制的算法,但该算法在while循环中,我需要将其转换为递归函数。 这是while循环中的算法: int octalNumber = 0, i = 1; while (x != 0) { octalNumber += (x % 8) * i; x /= 8; i *= 10; } return octalNumber; 有人能帮

我有一个将数字从十进制转换为八进制的算法,但该算法在while循环中,我需要将其转换为递归函数。 这是while循环中的算法:

int octalNumber = 0, i = 1;

        while (x != 0)
        {
            octalNumber += (x % 8) * i;
            x /= 8;
            i *= 10;
        }
        return octalNumber;
有人能帮我把它转换成递归函数吗

这将完成工作:

public int ToOctal(int x)
{
    if(x == 0)
    {
        return 0;
    }
    return x % 8 + 10 * ToOctal(x / 8);
}
请注意,在递归算法中,如果x等于0,我们将停止递归调用并返回0,而在您的循环中,我们将不断迭代直到x为0,在这两种算法中,我们传递所有x位的方式在逻辑上是相同的

还有一件事,虽然您必须使用i变量来知道新数字的位置,但在递归算法中,我们不需要此变量,而是使用递归调用堆栈的好处来实现此目的。

这将完成以下工作:

public int ToOctal(int x)
{
    if(x == 0)
    {
        return 0;
    }
    return x % 8 + 10 * ToOctal(x / 8);
}
请注意,在递归算法中,如果x等于0,我们将停止递归调用并返回0,而在您的循环中,我们将不断迭代直到x为0,在这两种算法中,我们传递所有x位的方式在逻辑上是相同的

还有一件事,虽然您必须使用i变量来知道新数字的位置,但在递归算法中,我们不需要这个变量,而是使用递归调用堆栈的好处