赞
踩
public static void main(String[] args){
test1(10);
test2(20);
}
private static void test1(int v){}
private static void test2(int v){
test3(30);
}
private static void test3(int v){}
public static void main(String[] args){
sum(4);
}
private static int sum(int n){
if(n <= 1) return n;
return n + sum(n-1);
}
int fib(int n){
if(n <= 2) return 1;
return fib(n - 1) + fib(n - 2);
}
递归调用的空间复杂度 = 递归深度 * 每次调用所需的辅助空间
public class Fib { public static void main(String[] args) { Fib fib = new Fib(); System.out.println(fib.fib1(10)); } int fib1(int n){ if (n <= 2) return 1; int[] array = new int[n + 1]; array[1] = array[2] = 1; return fib1(n,array); } int fib1(int n,int[] array){ if (array[n] == 0){ array[n] = fib1(n-1,array) + fib1(n-2,array); } return array[n]; } }
int fib(int n){
if(n <= 2) return 1;
int[] array = new int[n+1];
array[2] = array[1] = 1;
for(int i = 3;i <= n; i++){
array[i] = array[i-1] + array[i-2];
}
return array[n];
}
int fib3(int n){
if (n <= 2) return 1;
int[] array = new int[2];
array[0] = array[1] = 1;
for (int i = 3; i <= n; i++) {
array[i % 2] = array[(i-1) % 2]+array[(i-2) % 2];
}
return array[n % 2];
}
/** * 4 % 2 = 0 0b100 & 0b001 = 0 * 3 % 2 = 1 0b011 & 0b001 = 1 * 5 % 2 = 1 0b101 & 0b001 = 1 * 6 % 2 = 0 0b110 & 0b001 = 0 */ int fib4(int n){ if (n <= 2) return 1; int[] array = new int[2]; array[0] = array[1] = 1; for (int i = 3; i <= n; i++) { array[i & 1] = array[(i-1) & 1]+array[(i-2) & 1]; } return array[n & 1]; }
int fib5(int n){
if (n <= 2) return 1;
int first = 1;
int second = 1;
for (int i = 3; i <= n; i++) {
second = first + second;
first = second - first;
}
return second;
}
int climbStairs(int n){
if ( n <= 2) return n;
return climbStairs(n-1)+climbStairs(n-2);
}
int climbStairs(int n){
if(n <= 2) return n;
int first = 1;
int second = 2;
for(int i=3; i<= n; i++){
second = first+second;
first = second - first;
}
return seconnd;
}
public class Main {
static void log(int n){
if (n < 1) return;
log(n -1);
int v = n+10;
System.out.println(v);
}
public static void main(String[] args) {
log(4);
}
}
import java.util.Stack; public class Main { static class Frame{ int n; int v; Frame(int n,int v){ this.n=n; this.v=v; } } static void log1(int n){ Stack<Frame> frames = new Stack<>(); while (n > 0){ frames.push(new Frame(n,n+10)); n--; } while (!frames.isEmpty()){ Frame frame = frames.pop(); System.out.println(frame.v); } } public static void main(String[] args) { System.out.println("----"); log1(4); } }
/*尾调用*/
void test1(){
int a = 10;
int b = a +20;
test2(b);
}
/*尾递归*/
void test2(){
if(n < 10) return;
test2(n-1);
}
int factorial(int n){
if(n <= 1) return n;
return n * factorial(n-1);//最后一个动作是乘法,
}
int factorical(int n){
return factorical(n,1);
}
//result 从大到小累乘的结果
int factorical(int n,int result){
if(n <= 1) return result;
return factorical(n-1,n*result);
}
int fib(int n){
return fib(n,1,1);
}
public int fib(int n,int first,int second){
if(n <= 1) return first;
return fib(n-1,second,first+second);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。