Java递归基础疑惑

qq_27488519 2015-09-07 04:44:26

public class App {

private static int count;

public static int f(int x){
if(x == 0){
return 0;
}else{
count++;
return 2 * f(x - 1) + x * x;
}
}

public static void main(String[] args) {
System.out.println(f(3) + " c " + count);
}

}


我算的时候是:

2 * 2 + 3* 3 = 13
2 * 1 + 2 * 2 = 6
2 * 0 + 1 * 1 = 1

输出为20,但是一直输出21。.请问是如何去计算该递归程序,谢谢!
...全文
145 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
arkan3001 2015-09-07
  • 打赏
  • 举报
回复
明白就行了
lliiqiang 2015-09-07
  • 打赏
  • 举报
回复
我计算结果是21.
qq_27488519 2015-09-07
  • 打赏
  • 举报
回复
多谢大家,大致明白了,递归把上一次的结果放入到下一次在进行运算,之前一直返回来计算。
kenanvshongfei 2015-09-07
  • 打赏
  • 举报
回复
f(3) = 2 * (f2) + 3 * 3; (d)
f(2) = 2 * f(1) + 2 * 2; (c)
f(1) = 2 * f(0) + 1 * 1; (b)
f(0) = 0; (a)

-天宇 2015-09-07
  • 打赏
  • 举报
回复
引用 3 楼 qq_27488519 的回复:
[quote=引用 1 楼 andre374 的回复:] 9 + 2*(4+ 2*(1 + 2*0))
可以说说你的运算过程吗?我不是要这个答案![/quote]
引用 6 楼 qq_27488519 的回复:
[quote=引用 4 楼 andre374 的回复:] [quote=引用 3 楼 qq_27488519 的回复:] [quote=引用 1 楼 andre374 的回复:] 9 + 2*(4+ 2*(1 + 2*0))
可以说说你的运算过程吗?我不是要这个答案![/quote] 递归都不懂你不适合写程序[/quote] 莫装B,不回答没人逼你的。你也就这水平![/quote] 搞得你天生就会递归似的
andre374 2015-09-07
  • 打赏
  • 举报
回复
引用 6 楼 qq_27488519 的回复:
[quote=引用 4 楼 andre374 的回复:] [quote=引用 3 楼 qq_27488519 的回复:] [quote=引用 1 楼 andre374 的回复:] 9 + 2*(4+ 2*(1 + 2*0))
可以说说你的运算过程吗?我不是要这个答案![/quote] 递归都不懂你不适合写程序[/quote] 莫装B,不回答没人逼你的。你也就这水平![/quote] 呵呵,你脑子里装的才是B吧
qq_27488519 2015-09-07
  • 打赏
  • 举报
回复
引用 4 楼 andre374 的回复:
[quote=引用 3 楼 qq_27488519 的回复:] [quote=引用 1 楼 andre374 的回复:] 9 + 2*(4+ 2*(1 + 2*0))
可以说说你的运算过程吗?我不是要这个答案![/quote] 递归都不懂你不适合写程序[/quote] 莫装B,不回答没人逼你的。你也就这水平!
-天宇 2015-09-07
  • 打赏
  • 举报
回复
方法返回值是最后一次递归的返回值,而不是3次递归累加的 当x=0 f(0)=0 当x=1 f(1)=2*f(0)+1*1=1 当x=2 f(2)=2*f(1)+2*2=6 当x=3 f(3)=2*f(2)+3*3=21
andre374 2015-09-07
  • 打赏
  • 举报
回复
引用 3 楼 qq_27488519 的回复:
[quote=引用 1 楼 andre374 的回复:] 9 + 2*(4+ 2*(1 + 2*0))
可以说说你的运算过程吗?我不是要这个答案![/quote] 递归都不懂你不适合写程序
qq_27488519 2015-09-07
  • 打赏
  • 举报
回复
引用 1 楼 andre374 的回复:
9 + 2*(4+ 2*(1 + 2*0))
可以说说你的运算过程吗?我不是要这个答案!
解开者 2015-09-07
  • 打赏
  • 举报
回复
2*(2*(2*(2*0+0*0)+1*1)+2*2)+3*3 =2*(2*(2*0+1*1)+2*2)+3*3 =2*(2*1+2*2)+3*3 =2*6+3*3 =21
andre374 2015-09-07
  • 打赏
  • 举报
回复
9 + 2*(4+ 2*(1 + 2*0))

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧