递归与迭代

递归与迭代

递归

  • 优点:大问题转化为小问题,减少代码量,同时代码精简,可读性强
  • 缺点:递归浪费空间,而且递归太深容易造成堆、栈溢出。

迭代

  • 优点:代码运行效率好,因为时间只随循环次数增加而增加,而且没有额外的空间开销
  • 缺点:代码不如递归简洁,可读性不好

例题

编程题:有n步台阶,一次只能上1步或2步,共有几种走法?

解析:

  • n=1   ->一步                   ->f(1) = 1

  • n=2   ->一步一步/直接2步             ->f(2) = 2

  • n=3   ->先到f(1),然后从f(1)直接到f(2)       ->f(3) =f(1) + f(2)
        先到f(2),然后从f(2)跨1步

  • n=4   ->先到f(2),然后从f(2)直接跨2步       ->f(4) =f(2) + f(3)
        先到f(3),然后从f(3)跨1步

  • ···

  • n=x   ->先到f(x-2),然后从f(x-2)直接跨2步     ->f(x) =f(x-2) + f(x-1)
        先到f(x-1),然后从f(x-1)跨1步

答案

递归
public int f(int n){

  if(n<1){
  throw new IllegalArgumentException(n+"不能小于1");
  }

  if(n==1 || n==2){
  return n;
  }

  return f(n-2)+f(n-1);

}
循环迭代
public int loop(int n){

  if(n<1){
  throw new IllegalArgumentException(n+"不能小于1");
  }

  if(n==1 || n==2){
  return n;
  }

  int one = 2;
  int two = 1;
  int sum = 0;
  
  for(int i = 3; i<= 3; i++){
    sum = one + two;
    two = one;
    one = sum;
  }

  return sum;

}
posted @ 2021-07-05 19:55  别来无恙!  阅读(94)  评论(0)    收藏  举报