我需要创建一个递归函数,在不使用/
的情况下接收一个数字。
这就是我写的内容,但只有在分割后仍然是十进制数而不是浮点数时才有效,这就是我问的原因。
int recursive(int a, int b){
if ( a == (0.5 * b) )
return a;
return recursive(a-1, b);
}
顺便说一句,该功能只能接收1个不是2个或更多的参数:/
答案 0 :(得分:1)
我认为你需要这样的东西
int divide(int a, int b){
if(a - b <= 0){
return 1;
}
else {
return divide(a - b, b) + 1;
}
}
答案 1 :(得分:0)
你可以尝试这个,它应该有效:
int dividebytwo (int a){
static int answer = 0;
if (a < 0){
if ((answer * 2) > a){
answer --;
return dividebytwo (a);
}
return answer;
} else if (a > 0){
if ((answer * 2) < a){
answer ++;
return dividebytwo (a);
}
return answer;
}
return 0;
}
这里的诀窍是使用static
属性。 static属性表示变量仅初始化一次,并在每次函数调用后保留其值。真的,你使用的是两个参数,但看起来你只使用了一个参数。
此功能的唯一缺点是,您只能指望它不止一次工作。由于这可能是一个简单的家庭作业,它可能无关紧要。但实际上,这被认为是非常低效和不可靠的。
要补偿only-works-once
因素,可以添加以下修复之一:
将answer
声明为全局变量,并在每次函数调用之前将其设置为0
。
将return answer = 0;
追加到函数的末尾,而不是return 0;
。这样,无论何时您想再次调用它,都可以事先将其称为dividebytwo (0);
。
我也不能强调这是一个多么奇怪的概念,它为任何进行仔细编程的人设置了各种各样的危险信号 - 这可能就是为什么你会得到这么多的投票。所以要谨慎使用!
答案 2 :(得分:0)
这使用重复的减法和递归除以2。
int divide_by_two(int a) {
if (a < 0) return -divide_by_two(-a);
if (a < 2) return 0;
return 1 + divide_by_two(a - 2);
}
推广,这使用重复减法和递归将a
除以b
。
int divide(int a, int b) {
if (a < 0) return -divide(-a, b);
if (b < 0) return -divide(a, -b);
if (a < b) return 0;
return 1 + divide(a - b, b);
}
请注意,这些函数的舍入方式与C中定义的除法完全相同。
答案 3 :(得分:0)
#include<stdio.h>
int divide(int a, int b){
if( a-b < 0)
return 0;
else if ( a-b == 0)
return 1;
else {
return divide(a-b, b) + 1;
}
}