递归幂函数
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 nb
在 power
为 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;
}
该实现应该使用递归计算一个数的 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 nb
在 power
为 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;
}