黑马程序员技术交流社区
标题:
关于递归问题
[打印本页]
作者:
许聪聪
时间:
2013-6-9 19:12
标题:
关于递归问题
//求出这列数列的第20项的值: 1,1,2,4,7,13...
public class Demo {
public static void main(String[] args) {
System.out.println(f(20));
}
public static int f(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return f(n - 1) + f(n - 2) + f(n - 3);
}
}
}
public, return
复制代码
知道哪里出错了 ,麻烦给看看
作者:
小冰块
时间:
2013-6-9 19:23
本帖最后由 小冰块 于 2013-6-9 19:48 编辑
n等于3的时候要手动return 2;
作者:
武志红
时间:
2013-6-9 19:34
你的代码有误,改成这样:
public class Demo {
public static void main(String[] args) {
System.out.println(f(100));
}
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);
}
}
}
复制代码
第三项也要作为递归结束的条件, 因为你是前三项相加
作者:
孙金鑫
时间:
2013-6-9 19:37
本帖最后由 孙金鑫 于 2013-6-9 19:41 编辑
//求出这列数列的第20项的值: 1,1,2,4,7,13...
public class Demo {
public static void main(String[] args)
{
System.out.println(f(20));
}
public static int f(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
if(n==3)//这里一定要明确一下,否则的话,f(3)=f(2)+f(1)+f(0)....了,或者这样写,if(n==0) return 0;
return f(2)+f(1);
return f(n-1)+f(n-2)+f(n-3);
}
}
复制代码
作者:
w270307032
时间:
2013-6-9 20:07
本帖最后由 w270307032 于 2013-6-9 20:14 编辑
求出这列数列的第20项的值: 1,1,2,4,7,13...
public class Demo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(f(7));
}
public static int f(int n) {
if(n>0){
if (n == 1 || n == 2) {
return 1;
}
if(n==3)
return 2;
else {
return f(n -1) + f(n - 2)+f(n-3) ;
}
}
else{
throw new RuntimeException("兄弟,你传错值了,栈溢出了");
}
}
}
复制代码
楼主要求的是前面三项的和,所以f(1),f(2),f(3)都得指定,还有必须n>0;要不就会出现楼主的栈溢出的情况,能到int的负数去。其实n如果太大的话也会溢出的,但这个上限就看你机子内存了,但上限不好界定,不要和自己的电脑过不去{:soso_e113:}
作者:
刘晓
时间:
2013-6-9 20:41
之前不是有人问过这个问题么?
http://bbs.itheima.com/forum.php ... mp;page=1#pid358478
作者:
杨增坤
时间:
2013-6-10 23:33
public static void main(String[] args) {
System.out.println(f(20));
}
public static int f(int n) {
if (n == 1 || n == 2
|| n==3
) {
return 1;
} else {
return f(n - 1) + f(n - 2) + f(n - 3);
}
}
如果不加n==3那当n==3的时候会报错的,以为f(n-3)中n-3=0而在这个方法中没有表明f(0)的情况,所以会出错!希望对你有所帮助!
作者:
mvplee
时间:
2013-6-11 01:25
费布尼奇数列。。。。
作者:
xiaohu1218
时间:
2013-6-11 16:51
本帖最后由 xiaohu1218 于 2013-6-11 16:53 编辑
楼主你好,这个问题的算法思路很清晰:
前两项的数值均为1,
第三项的数值是前两项的和2,或者直接指定为2;
从第四项开始,每一项的数值均为其前面三项的数值之和;
这样一来就需要明确指定前三项的数值
而楼主只指定了前两项的准确值,忽略了f(3);
在计算到f(3)时,由于没有指定f(0),因此就出错了;
求值递归函数为
public static int getnum(int n) {
if(n==1 || n==2)
return 1;
if(n==3)
return getnum(n-1)+getnum(n-2);
if(n>3)
return getnum(n-1)+getnum(n-2)+getnum(n-3);
else
System.out.println("输入有误");
return -1;
}
另外为增加程序的完整性和可靠性,建议楼主加上输入数据的合法性判断,
如:输入负数时,提示用户输入的数据不合法。
作者:
孙百鑫
时间:
2013-6-13 06:15
楼主您好!如果问题得到解决请将题目改成"已解决"
编辑文章-->修改 如果问题没有得到解决请继续发问谢谢您的配合
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2