递归函数除数

时间:2013-06-08 08:16:10

标签: c recursion divide

我需要创建一个递归函数,在不使用/的情况下接收一个数字。

这就是我写的内容,但只有在分割后仍然是十进制数而不是浮点数时才有效,这就是我问的原因。

int recursive(int a, int b){
  if ( a == (0.5 * b) )
    return a;
  return recursive(a-1, b);
}

顺便说一句,该功能只能接收1个不是2个或更多的参数:/

4 个答案:

答案 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;
    }
  }

http://codepad.org/o4CoiaON