我先说递归使用的条件是什么
1. 基准情形:必须有某些基准情形,不用递归就能解决
2. 不断推进:就是对于那些要被递归的清形, 递归调用必须总能够朝着一个基准的情形推进。
现在 我按照毕向东老师的画图的方法 给你指一下你的问题:
见图
所以 就出现问题了
对于这样的含有递推公式的递归程序 你这样做你比较好
f(n) =f(n-1)+ f(n-2) +f(n-3)这个是递推公式吧
那么 你的起始项是不是n=1 所以 你这里面 是不是要
n-1 >=1
n-2>=1
n-3>=1
三个不等式取交集 得到的n的范围是 n>=4
所以 f(n) =f(n-1)+ f(n-2) +f(n-3)成立的条件必须是n>=4才能使用 那么 n<4 (n为整数) 也就是 n=1 n=2和n =3的时候 上面的递推公式不满足 你是不是要自己定义取值啊
f(1) =1
f(2) =1
f(3) =2
这三个值才叫基准值 你少定义了一个
我写了一下代码 你看看:
//求出这列数列的第20项的值: 1,1,2,4,7,13...
public class Demo {
public static void main(String[] args) {
System.out.print("f("+1+") ="+ f(1)+" ");
System.out.print("f("+2+") ="+ f(2)+" ");
System.out.print("f("+3+") ="+ f(3)+" ");
System.out.print("f("+4+") ="+ f(4)+" ");
System.out.print("f("+5+") ="+ f(5)+" ");
System.out.print("f("+6+") ="+ f(6)+" ");
System.out.print("f("+7+") ="+ f(7)+" ");
}
public static int f(int n) {
if (n == 1 || n == 2)
return 1;
else if( n==3)
return 2;
else
return f(n - 1) + f(n - 2) + f(n - 3);
}
}
|
|