用递归算法实现费博那契数列的问题

qlykssl 2008-09-21 10:13:38
问题:“一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。”
我写的程序是(如果2算第一个数的话):
public class Untitled1 {
public static void main(String[] args) {
int a=1;
int b=1;
int n=30

System.out.print("last row is:"+funcktion(a,b,n));
}
static int funcktion(int i,int j,int n){
if(n>0 && n%2==1){
return funcktion(i, j = i + j, n - 1);
}
else if(n>0 && n%2==0){
return funcktion(i = i + j, j, n - 1);
}
else
return j;
}
}
但是我感觉好像不对劲,怎么感觉我的这个不象递归呢 ?
有人能给我讲讲么?
...全文
224 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CpRcF 2008-09-23
  • 打赏
  • 举报
回复

int fab(int n) {
return (n > 1) ? (fab(n-1) + fab(n-2)) : ((n < 0) ? 0 : 1 );
}
qlykssl 2008-09-22
  • 打赏
  • 举报
回复
3楼的好像是个高手啊 呵呵
qlykssl 2008-09-22
  • 打赏
  • 举报
回复
谢谢 明白了
爱摸鱼de老邪 2008-09-21
  • 打赏
  • 举报
回复
你那个写的太复杂了,没必要传3个参数,虽然也是递归。
CpRcF 2008-09-21
  • 打赏
  • 举报
回复

int fab(int n) {
return (n > 1) ? (fab(n-1) + fab(n-2)) : 1;
}
爱摸鱼de老邪 2008-09-21
  • 打赏
  • 举报
回复
中间少了个"}",囧
爱摸鱼de老邪 2008-09-21
  • 打赏
  • 举报
回复
斐波拉奇数列的公式:f(n)=f(n-1)+f(n-2)
那么递归函数可以这么写:
static int function(n)
{
if(n<0) {System.out.error("invalid value.");
else if(n==0) return 1;
else if(n==1) return 1;
else return function(n-1)+function(n-2);
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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