实现应使用递归计算到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);
}
答案 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);
}