[问题] 用recursive写pow

楼主: ForWin (For Windows)   2016-11-17 20:51:59
开发平台(Platform): (Ex: Win10, Linux, ...)
Win7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
TDM-GCC 4.9.2 64-bit Release
问题(Question):
看了一段关于用recursive写pow函式的code,不太懂
喂入的资料(Input):
myPow(2,2)
预期的正确结果(Expected Output):
1
程式码(Code):(请善用置底文网页, 记得排版)
1. double myPow(double x, int n) {
2. if (x==0) return 0;
3. if (n==0) return 1;
4. if(n<0){
5. x = 1/x;
6. n=-n;
7. }
8. if(n%2==0){
9. return myPow(x*x,n/2);
10. }else{
11. return x*myPow(x*x,n/2);
12. }
13. }
补充说明(Supplement):
我在return的部分有问题,始终搞不太懂
这程式的结果是正确的
但我的思绪如下
一开始喂入myPow(2,2),会跑到第9行
而此时myPow说我不知道,你等等,我return myPow(4,0)给你
而这时候应该跑到第3行,return 1
所以我预期要跑出1
不过这支程式却能够正确跑出4
究竟myPow(2,2)是怎么从myPow(4,0)拿到4这个值的呢?
不知道我的观念是不是有什么地方出错卡住了
但如果是以下这种写法我就能理解
double myPow(double x, int n) {
if (x==0) return 0;
if (n==0) return 1;
if(n>0){
return x*myPow(x,n-1);
}
}
还望各位高手帮忙看看我的问题出在哪
谢谢各位
作者: tsoahans (ㄎㄎ)   2016-11-17 20:55:00
n/2怎么会是0
楼主: ForWin (For Windows)   2016-11-17 20:58:00
...我蠢毙了...谢谢楼上....版主能帮删这篇吗XDDDD
作者: pttworld (批踢踢世界)   2016-11-17 21:25:00
y=myPow(x,n/2); 回传y*y*x和y*y。

Links booklink

Contact Us: admin [ a t ] ucptt.com