任何数都可以分解为2的幂,假定给一个整数n,把他转换为以下形式:
这里用到递归算法:f(2m+1)=f(2m); f(2m)=f(2m-1)+f(m);点击打开链接:原文
以下是java代码:
public class IntegerTest
{
public static void main(String[] args)
{
Scanner in=new Scanner(new InputStreamReader(System.in));
BigInteger[] num=new BigInterger[1000002];
num[1]=BigInteger.valueof(1);
for(int i=2;i<=n;i++)
{
if(i%2==0)
{
num[i]=num[i-1].add(num[i/2]);
}
else
{
num[i]=num[i-1];
}
}
System.out.println(num[n]);
}
}
悟:递归算法,这里是从1到n,以下是从n到1
public class CalculateTest {
static BigInteger[] num=new BigInteger[1000002];
public static void main(String[] args)
{
Scanner in=new Scanner(new InputStreamReader(System.in));
int n=in.nextInt();
calculateNext(n);
System.out.println(num[n]);
}
public static void calculateNext(int n)
{
if(n>=2)
{
if(n%2==0)
{
calculateNext(n-1);
calculateNext(n/2);
num[n]=num[n-1].add(num[n/2]);
}
else
{
calculateNext(n-1);
num[n]=num[n-1];
}
}
else
{
num[1]=BigInteger.valueOf(1);
}
}
}
经过运行,两种方法结果相同,哦也~~~~