递归幂函数

Power function by means of recursion

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

当我 运行 ft_recursive_power(3, 10);在 c 可视化工具(ctutor)中并将这些参数传递给它,它显示 nb 在整个执行过程中保持 3,并且 returns 177147,而它应该累积乘法和 return 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);
}

这是你的问题:

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

应替换为

if (power == 0)

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

如果(nb == 0)

该函数也适用于负幂,所以我建议将 return 类型更改为浮动。

这是我的解决方案:

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);
}

你得到的结果不正确,因为你的基本情况是错误的。

值 177147 是 311 而不是 310,这意味着您要乘以一个额外的时间。发生这种情况是因为 return nbpower 为 0 的基本情况下。

当计算一个数的 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;
}