谁能开出来这个递归调用错出在哪??

来源:百度知道 编辑:UC知道 时间:2024/05/31 16:16:14
import java.awt.Graphics;
import java.applet.Applet;

public class Text9 extends Applet
{
public void paint(Graphics g)
{
g.drawString("2的20次方是 "+find2(20),20,20);
}

double find2(int n)
{
double a=0.0;
if(n%2==0)
{
n=n/2;
a=find2(n);
a=a*a;
}
return a;
}
}

请哪位高人帮忙改改~~

有什么错,没什么错啊

但是语法没错,逻辑有错,递归总要有终止条件的,当你的递归终止时,你会直接返回0.0,因为递归终止时也就是if不执行的时候,if不执行也就直接返回a的值,也就是0.0,而你的递归中间,对a的操作只是得到别的a,然后对他平方,那么你的a返回的永远是0,这不是你要的结果。

你想算2的幂吗?这是照你的意思写的
double find2(int n) {
if (n == 1) return 2;
double d = find2(n >> 1);
d = d * d;
return (n & 1) == 0 ? d : d * 2;
}