请使用递归的方式求出斐波那契数1,1,2,3,5,8,13...给你一个整数n,求出它的值是多少
public class RecursionExercise01{
public static void main(String[] args){
Figure fi = new Figure();
int n=fi.rec(8);
if(n !=-1){
System.out.println("对应的斐波那契"+n);
}
}
}
class Figure{
public int rec(int num){
if(num>=1){
if(num == 1||num == 2){
return 1;
}else{
return rec(num-1)+rec(num-2);
}
}
else{
System.out.println("要求输入的数>=1");
return -1;
}
}
}
代码是怎么运行的,return rec(num-1)+rec(num-2);递归怎么返回数值的,详细,一定要详细。
你随便代入一个数进去跑一遍就理解了,就是不断调用函数自身直到底层层层递进返回结果后再累加。
1.比如rec(4),进到return rec(3)+rec(2);
1.1但这时候rec(3)没有值返回,他也需要调用一遍rec()这个函数,即rec(3)会进到rec(2)+rec(1);
1.2这个时候,rec(2) = 1和rec(1) =1有返回值了,这结果就返回到上一步rec(3)这里,即rec(3)=1+1=2;
2.rec(3)得到结果2后,返回第一步,得rec(4)=2+rec(2);
3.然后rec(2)会返回1,即rec(4)=2+1=3;
递归的方式。
当前项为前两项之和。
按照斐波那契数列的数学定义,F(n)=F(n – 1)+F(n – 2)(n ≥ 3,n ∈ N*),即当 n ≥ 3 时,斐波那契数列中这一项的值等于前面两项的值之和,这样便可以将求解一个比较大的斐波那契数列转化为求解较小数值的斐波那契数列值,这里面有重复逻辑可以递归复用。
例如,当我们求解斐波那契数列中的 F(5) 时,按照定义,我们有:
F(5) = F(4) + F(3) // 递归分解
= ( F(3) + F(2) ) + ( F(2)+F(1) ) // 递归求解
= [ ( F(2)+F(1) ) + 1 ] + ( 1+1 ) // 递归求解,遇到终止条件就求解
= [(1+1) +1 ]+(1+1) // 归并
= 3 + 2 // 归并
= 5 // 归并
rec函数中,当num是1和2的时候,返回的值是1,否则就返回rec(num-1)+rec(num-2),也就是rec(num)=rec(num-1)+rec(num-2)
当num=1的时候,rec(1)返回值是1
当num=2的时候,rec(2)返回值是1
当num=3的时候,rec(3)返回的值是rec(1)+rec(2),rec(1)和re(2)的值都是1,也就是rec(3)=1+1=2
当num=4的时候,rec(4)返回的是rec(3)+rec(2),rec(3)再次迭代,返回的是rec(1)+rec(2),所以计算结果就是2+1=3
以此类推。
你可以在IDEA里面用DEBUG的方式来运行项目,在递归的地方打一个断点,这样可以方便你理解代码