A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏的四季 中级黑马   /  2014-3-5 19:57  /  1062 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏的四季 于 2014-3-5 21:36 编辑
  1. class demo
  2. {

  3. public static void main(String[] args) {
  4. System.out.println(f(20));
  5. }
  6. private static int f(int n) {
  7. if (n==1 || n==2) {
  8. return 1;
  9. }else {
  10. return f(n-1)+f(n-2);
  11. }
  12. }
  13. }
复制代码

这是怎么计算的?结果是6765。为什么啊,说说计算过程

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
其实这是一个递归方法,当这式子其实就是f(n)=f(n-1)+f(n-2); f(1)=f(2)=1; 其实他就是一个求Fibonacci数列的第N项
回复 使用道具 举报
斐波那契数列,1,1,2,3,5,8,13。。。第一项和第二项都是1,从第三项开始,每一项都是前两项的和。
回复 使用道具 举报
这个数列除了前两项f(1)=f(2)=1之外,后面的其他每一项都等于前两项之和。就比如你求f(20)就等于f(19)+f(18),而你又需要求f(19)和f(18)的值就分别为f(19)=f(18)+f(17) ,f(18)=f(17)+f(16)....这样依次求到f(3)=f(2)+f(1),通过递归就可以把值返回来。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报 1 0
天凌蓝 发表于 2014-3-5 20:09
其实这是一个递归方法,当这式子其实就是f(n)=f(n-1)+f(n-2); f(1)=f(2)=1; 其实他就是一个求Fibonacci数列 ...

很赞,原来是这样啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马