提升为指数的数字的递归解决方案
Recursion solution for a number raised to an exponent
嘿,我有一个问题,我必须用多种方法解决x^n。其中一个涉及到使用递归公式,这让我很难理解。因此,我对x^n使用递归的方法之一是n>=0
int power2(int base, int power){
if (power == 0)
return 1;
else if ( power == 1)
return base;
else
return (base * power2(base, power - 1));
}
这对我来说是有意义的,所以当我设置X=2和N=4时,它降低了功率,它起到了计数器的作用,并将2x2的功率提高到3,4*2,功率提高到2,8*2=16。然后幂被提升到1,我有一个基本情况是,如果幂被提升为1,它只是返回基数。然而,对于我的下一个问题,我必须使用三个公式来解决它。
- x0=1
- 如果n是偶数=[xn/2]2
- 如果n是奇数=x*[xn/2]2
所以到目前为止我拥有的是
int power3(int base, int power){
if(power == 0){
return 1;
}
else if ( power == 1)
return base;
// if power is even
if (power % 2 == 0){
return base*(power3(base,(power/2)));
}
// if power is odd
else{
return 0;
}
}
所以我只是想让偶数先起作用,当我设置x=2和n=4时,它会返回8。这对我来说是有道理的,因为当功率为4/2时,只有两次循环才能大于1。所以我真的在想办法让这个循环一次,同时保持我给出的公式。当我现在添加奇数基本情况时,程序将一直工作到n^5,但n^6返回32
您在解释公式时遇到了一个小问题x^n if n is even = [x^n/2]2
并不意味着:
base*(power3(base,(power/2))) //meaning x * [x^n/2]
宁愿你有
(power3(base,(power/2))) * 2
再看你的公式,它甚至不正确,应该是x^n if n is even = [x^n/2]^2
因此代码:
(power3(base,(power/2))) * (power3(base,(power/2)))
或:
(power3(base * base,(power/2)))
你的整个功能可能应该是这样的:
int power3(int base, int power){
if(power == 0){
return 1;
}
else if ( power == 1) // you don't really need this case,
return base; // power == 0 is enough as base case
// if power is even
if (power % 2 == 0){
return (power3(base * base,(power/2)));
}
// if power is odd
else{
return base * (power3(base * base,(power/2)));
}
}
好吧,因为你似乎仍然对奇怪的力量感到困惑
您的power
变量是int
,因此您得到的整数除法意味着3/2=1而不是1.5(小数点后面的所有内容都会被截断)。
现在让我们来看看函数中的奇怪情况:
return base * (power3(base * base,(power/2)));
假设base == 4
和power == 5
return 4 * (power3(4 * 4,(5/2))); // 5/2 evaluates to 2
等于说return 4 * (power3(4, 5 - 1))
然后返回CCD_ 8,因为我们现在得到了一个偶数情况。
我们基本上只做这两个步骤作为1。我觉得我的解释听起来有点奇怪,但希望能有所帮助。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 我必须找到给定数组中所有数字的周期,就像有很多解决方案,但数组的大小是 10^5
- 矩阵中主对角线下的最高偶数.超大数字的解决方案?
- sort() 方法 c++ 中的比较器函数.为大量数字获得不同的解决方案
- 提升为指数的数字的递归解决方案
- 我无法理解方程式的解决方案,该方程式说找到了最小的数字,因此x plus y等于x bitwise或y
- 给定一个范围,我必须计算数组中数字的频率.给定的解决方案是否有效