C 递归函数除数
我需要创建一个递归函数,它不使用C 递归函数除数,c,recursion,divide,C,Recursion,Divide,我需要创建一个递归函数,它不使用/就可以接收一个2乘的数字 这是我写的,但它只有在除法后仍然是十进制数而不是浮点数时才起作用,这就是我问的原因 int recursive(int a, int b){ if ( a == (0.5 * b) ) return a; return recursive(a-1, b); } 顺便说一句,该函数只能接收1个参数,不能接收2个或更多://我想您需要这样的参数 int divide(int a, int b){ if(a - b &
/
就可以接收一个2乘的数字
这是我写的,但它只有在除法后仍然是十进制数而不是浮点数时才起作用,这就是我问的原因
int recursive(int a, int b){
if ( a == (0.5 * b) )
return a;
return recursive(a-1, b);
}
顺便说一句,该函数只能接收1个参数,不能接收2个或更多://我想您需要这样的参数
int divide(int a, int b){
if(a - b <= 0){
return 1;
}
else {
return divide(a - b, b) + 1;
}
}
intdivide(inta,intb){
如果(a-b你可以试试这个,它应该可以工作:
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;
}
int除以2(int a){
静态int-answer=0;
if(a<0){
如果((答案*2)>a){
回答——;
返回除以二(a);
}
返回答案;
}如果(a>0),则为else{
如果((答案*2)
这里的诀窍是使用static
属性。static属性意味着变量只初始化一次,并在每次函数调用后保留其值。实际上,您使用了两个参数,但看起来似乎只使用了一个
这个功能的唯一缺点是,你只能依靠它工作不止一次。因为这可能是一个简单的家庭作业,这可能并不重要。但实际上,这被认为是非常低效和不可靠的
为了补偿仅工作一次的因素,可以添加以下修复之一:
- 将
answer
声明为全局变量,并在每次函数调用之前将其设置为0
- 将
return answer=0;
附加到函数的末尾,而不是return 0;
。这样,每当您想再次调用它时,您都可以预先将其调用为除以二(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);
}
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中定义除法的方式不同。\include
#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;
}
}
整数除法(整数a,整数b){
if(a-b<0)
返回0;
else如果(a-b==0)
返回1;
否则{
返回除法(a-b,b)+1;
}
}
我知道可能有重复的问题,但如果没有人重新打开帖子或帮助我,我该怎么办?编辑你之前的问题以使其更清楚。我不确定我是否理解上面关于浮动的部分。不要重新发布你的问题。基本上,你想做一个浮动除以二(浮动a)
函数不使用/
,对吗?@BorisWainstein您对问题解释得很糟糕,很难让任何人给您满意的答案。我真的不知道您在问什么。谢谢您的回答,但请仔细阅读:返回“n/2”没有除法,它只能接收1个参数。我看到了“intrecursive(inta,intb)”“他想要一个浮点”是什么意思?@TaylorI认为一个解决方案可能是找到一个在给定n的情况下收敛到n/2的级数……应该有一个,但我不记得了。当他说decimal
时,我原以为他想要一个float
值,但否决票也是因为他提到他只想要一个参数。但对于每一个--/++静态答案都会是正确的更改,如果不编写static,它也会工作。尝试取出static
,看看会发生什么,你会得到堆栈溢出。因此,不,没有static
,它将无法工作。此外,我在我的回答中添加了一些信息,你应该阅读。规则xD不是我提出的