日期:2014-05-20  浏览次数:20733 次

为嘛这样可以实现递归,不懂啊,求高手指点
package test;

import java.util.*;

public class Test {

  public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  System.out.println("输入一个正整数:");
  int n = sc.nextInt();
  System.out.println(fan(n));
  }
   
  public static int fan(int n){
  if(n==1){
  return 1;
  }else{
  return n=n+fan(n-1);
  }
  }
}

------解决方案--------------------
public static int fan(int n)这个方法里又调用了自己,这就是递归。

public static int fan(int n){
if(n==1){
return 1;
}else{
return n=n+fan(n-1);
}
}
------解决方案--------------------
你这是求和吧。

比如你输入3,

反过来比较好理解。

因为fan(1) == 1 是固定的。

这样fan(2) = 2 + f(1) = 3

fan(3) = 3 + fan(2) = 6
------解决方案--------------------
其实这种做法是不大规范的,一般很少用的,只有在现有业务方法或是要写太多的业务代码的时候才会用,这种方法如果传入的参数或是递归的次数太多会引起系统内存溢出的。

public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
System.out.println("输入一个正整数:");
int n = sc.nextInt();
int sum=0;
while(n>=0){
sum=sum+fan(n);
n--;
}
System.out.println(sum);
}
public static int fan(int n){
if(n==1){
return 1;
}
else{
return n;
}
}
------解决方案--------------------
递归嘛,其实理解起来很简单,其效果和循环差不多,但和循环是不同的概念。循环是在一个方法里实现,而递归则是在同一个类里面,如果在A方法里需要实现B方法,则直接在A方法里调用B方法----B(参数)即可
------解决方案--------------------
探讨

public static int fan(int n)这个方法里又调用了自己,这就是递归。

public static int fan(int n){
if(n==1){
return 1;
}else{
return n=n+fan(n-1);
}
}