看了好多解法,但是就是没有公式法,所以自己写了一个:
题目描述 :
果园里有一堆苹果,一共n头(n大于1小于9)熊来分,第一头为小东,它把苹果均分n份后,多出了一个,它扔掉了这一个,拿走了自己的一份苹果,接着第二头熊重复这一过程,即先均分n份,扔掉一个然后拿走一份,以此类推直到最后一头熊都是这样(最后一头熊扔掉后可以拿走0个,也算是n份均分)。问最初这堆苹果最少有多少个。
给定一个整数n,表示熊的个数,返回最初的苹果数。保证有解。
测试样例:
2
返回:
3
代码:
传统递归方法O(n):
public class NumApple {
public static void main(String[] args) {
int result = shareApple(3);
System.out.println(result);
}
public static int shareApple(int n){
int rs =0;
if(n==1){
rs = 1;
}else{
rs = n*shareApple(n-1)+1;
}
return rs;
}
}
公式法O(1):
public class NumApple {
public static void main(String[] args) {
int n = 4;
System.out.println(shareApple(n));
}
public static int shareApple(int n) {
int sum = (int) (Math.pow(n, n) - n + 1);
return sum;
}
}