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不是我提出的