有道面试题,很简单 ,
1、一组有规则的数1、1、2、3、5、8、13、21、34……,问:第30位的数是多少
请有递归算法写出来。
下面分别是我的C,和java 的代码。用C一点问题也没有,但用java就有问题了。当30的时候,它一直
偱环多了几十次。不知有那位高手来帮帮我解释一下。
//这是我的C代码
- C/C++ code
#include <stdio.h>int count(int num);int i=0;int j=0;int k=0;void main(){ int sum=count(1); printf("%d",sum);}int count(int num){ j=i+num; i=num; if(k<30) { k++; return count(j); } else { return j; } }
//这是我的java代码
- Java code
public class Demo{ long i=0; long j=0; int k=0; public long conut(final long a) { j=i+a; i=a; System.out.println(i+" "+j+" "+k); if(k<30) { ++k; return conut(conut(j)); }else { return j; } } public static void main(String[] arg) { Demo demo=new Demo(); long num=demo.conut(1L); System.out.println(num); }}
------解决方案--------------------
fibonacci对列
return conut(conut(j));为什么要嵌套调用?
------解决方案--------------------
- Java code
return conut(conut(j)); //多了个conut
------解决方案--------------------
return count(count(j));应改为return count(j);
不然每次递归时就会产生两次调用。K=30时,回退了两次,由于K是全局的,所以调用或回退时值不会变化了。
------解决方案--------------------
经典的肺部尼奇啊……