递归的幂函数

时间:2019-02-12 13:26:33

标签: c recursion math exponent

实现应使用递归计算到n次幂的数字,但是,每次调用自身时,“ nb”均保持不变,而功率递减。我试过使用一个累加器变量,但这会在每次重复调用时重新初始化为默认值。有没有一种方法可以将nb * nb保存到nb,而无需添加额外的参数?或失去基本价值?

当我运行ft_recursive_power(3,10);在c可视化器(ctutor)中并将这些参数传递给它,它显示在整个执行过程中nb仍为3,并返回177147,而它应该累加乘法并返回59049。还是我错过了什么?

int   ft_recursive_power(int nb, int power)
{
  // 0 to the 0th case
  if (power == 0 && nb == 0)
    return (1);
  // recursive case
  if (power > 0)
    return (nb * ft_recursive_power(nb, power - 1));
  return (nb);
}

2 个答案:

答案 0 :(得分:3)

由于基本情况错误,您得到的结果不正确。

值177147是3 11 而不是3 10 ,这意味着您要多花一倍的时间。发生这种情况是因为您在return nb为0的基本情况下power

将数字加到0的幂上时,结果为1,因此您的基本情况应为1。

int   ft_recursive_power(int nb, int power)
{
  // 0 to the 0th case
  if (power == 0 && nb == 0)
    return 1;
  // recursive case
  if (power > 0)
    return nb * ft_recursive_power(nb, power - 1);
  return 1;
}

答案 1 :(得分:-1)

这是您的问题:

if (power == 0 && nb == 0)

应替换为

if (power == 0)

并增加了大小写(nb == 0)

如果(nb == 0)

该函数也应适用于负功率,因此我建议将返回类型更改为float。

这是我的解决方案:

float   ft_recursive_power(int nb, int power)
{
    // 0 to the 0th case
    if (power == 0)
        return 1;
    if (nb == 0)
        return 0;

    // recursive case
    // power is positive
    if (power > 0)
        return (nb * ft_recursive_power(nb, power - 1));

    // mean power is negative
    else
        return (ft_recursive_power(nb, power + 1) / nb);
}