关于递归这是一个稍微拐弯的算法。
对于斐波那契数,你要明白他长什么样{1,1,2,3, 5, 8, 13, 21…}
这里我们只说递归求法
可以看出前两个数是1,后面的数都是前两个数的和。
假设求六个数可以看出是8,即3+5=8
即第n个数等于(n-2)+(n-1)
我们可以根据代码看下递归思路(个人理解哈哈)
思路:
①main方法里new了一个新对象名fb
②定义两个属性,同时res对象里调用一个方法,这里就会开辟一个新栈独立于main方法外。
③这时候看fibonacii方法,这里构造一个参数,里面if进行判断
④这里你要明确使递归结束的语句 return fibonacii(n-1)+fibonacii(n-2)
这里的递归就在于if判断里
其实你画个图的话会更加有利于你理解递归。
⑤接着就是第一个输出句,前面你调用完就会释放栈,就又返回到main方法里了
package cheap01;
public class Recursion {
public static void main(String[] args) {
// TODO Auto-generated method stub
cheap1 fb=new cheap1();
int n=0; // 确定你要输出数的位置
int res = fb.fibonacii(n); //定义一个对象名作为斐波那契数
System.out.println("输出第"+n+"个数");
System.out.println("第"+(n)+"个斐波那契数是:"+res);
}
}
class cheap1{ //定义一个对象
//定义一个int返回类型的fibonacii方法 传入一个形参n
public int fibonacii(int n) {
if(n>=1) {
//根据斐波那契的规则进行判断
if(n==1 || n==2) {
return 1;
}else {
//重要的是下面的返回类型
return fibonacii(n-1)+fibonacii(n-2);
}
}
else {
System.out.println("请输入合适的数字");
return -1 ;//这里代表你输入的数是不合规范的
}
}
}
斐波那契重要的思路就是你要知道递归结束的条件
关于递归的思路,可以看看视频(推荐老韩的)O(∩_∩)O哈哈~