c# - 如何创建一个仅使用加法和 2 个变量进行除法的递归函数

标签 c# algorithm recursion division addition

我最近接到一份学校作业,要求制作一个递归函数,该函数仅使用加法(不允许减法)进行除法,并且只有 2 个变量。

编辑:基于评论的一些注释:

  • n1 除以 n2。 (n1:n2)

  • 答案应该是 n2 可以放入 n1 的次数的整数 (int)(8:3 应该得到 2,8:4 也应该得到 2)。

  • 您可以假设输入仅为正整数。

按照评论中的要求,我会尽力将作业翻译成英文并尽可能准确:

Write a recursive function named "PDiv" that gets two whole positive numbers and returns their whole quotient, using addition operations only.

我尝试使用 2 个递归函数来实现,如下所示:(赋值只需要一个函数,因此这不是正确的答案)

public static int PDiv(int n1, int n2)
{
    if (n1 < n2)
        return 0;
    else if (n1 == n2)
        return 1;
    else
        return PDiv(n1, n2 + n2, n2) + 1;
}

public static int PDiv(int n1, int n2, int con)
{
    if (n1 < n2)
        return 0;
    else if (n1 == n2)
        return 1;
    else
        return PDiv(n1, n2 + n2, con) + 1;
}

除此之外,我还尝试过那个确实有效的方法,但它假装很聪明,但实际上并没有用加法来实现,而是加上了减号(基本上是减法)。示例:

public static int PDiv(int n1, int n2)
{
    if (n1 < n2)
        return 0;
    else if (n1 == n2)
        return 1;
    else
        return PDiv(n1 + -n2, n2) + 1;
}

如果有人知道我如何让它发挥作用,我很想听听!提前致谢!

最佳答案

这是我们实现这一目标的一种方法,前提是我们可以使用模运算符和局部变量。

这个想法是,如果我们知道 PDiv(n, m + m),我们只需要知道是否还能再添加一个 m 即可。

C# 代码:

using System;

public class Test
{
    public static int PDiv(int n, int m)
    {
        if (n < m)
            return 0;
        if (n == m)
            return 1;
  
        int k = PDiv(n, m + m);

        return k + k + (n % (m + m) < m ? 0 : 1);
    }

    public static void Main()
    {
        Console.WriteLine(PDiv(21, 3));
    }
}

关于c# - 如何创建一个仅使用加法和 2 个变量进行除法的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64514203/

相关文章:

ms-access - 如何修复 "out of stack space"错误?

javascript - jQuery fadeOut 回调永远不会触发

c# - 如何为多种文件类型设置 FileSystemWatcher 过滤器?

c# - 无法从远程机器获取元数据,但本地没问题

algorithm - 所有 N 的 k 组合数

java - 最短路径算法 : Uniform distances from one point to adjacent points

javascript - 等待递归函数时获取未定义的结果

c# - 对于小型密集型任务,C# 的性能与 C++ 的性能有多接近?

c# - 设置中的 .NET Core Moq Params 数组

python - 过滤在非常大的列表中只出现一次的项目