【发布时间】:2021-02-07 08:34:03
【问题描述】:
我最近得到了一项学校作业,要创建一个递归函数,该函数只使用加法(不允许减法)进行除法,并且只有 2 个变量。
编辑:基于 cmets 的几点说明:
-
n1 除以 n2。 (n1:n2)
-
答案应该是一个整数 (int),您可以将 n2 放入 n1 中的次数(8:3 应该得到 2,8:4 也应该得到 2)。
-
您可以假设输入只是正整数。
按照cmets的要求,我会尽量把作业翻译成英文,尽量准确:
编写一个名为“PDiv”的递归函数,它获取两个正整数并返回它们的整数商,仅使用加法运算。
我尝试使用 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;
}
如果有人知道我如何让它发挥作用,我很想听听!提前致谢!
【问题讨论】:
-
n1是被除数,n2是除数吗?您是否只想要一个整数商,而忽略任何可能的余数? -
@Idle_Mind 刚刚用你的笔记更新了帖子。是的,n1 是被除数,n2 是除数。是的,我只是忽略任何余数的整数。
-
您是否必须处理一个或两个操作数为负数?
-
有了“并且只有2个变量”的规定,感觉接收三个参数的辅助函数就是作弊。你能贴一张作业的图片,或者它的确切措辞吗?
-
@Idle_Mind 尽我所能尽可能准确地翻译作业并将其编辑到帖子中(在引用中)。谢谢。
标签: c# algorithm recursion division addition