黑马程序员技术交流社区
标题:
一道入学测试题
[打印本页]
作者:
pengwei1989
时间:
2015-9-18 15:23
标题:
一道入学测试题
题目:求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
我是这么写的
class haha
{
public static void main(String[] args)
{
int arr[]=new int[30];
arr[0]=1;
arr[1]=1;
System.out.print(arr[0]+","+arr[1]);
for (int x=2;x<29 ;x++ )
{
arr[x]=arr[x-2]+arr[x-1];
if (x==28)
System.out.print(","+arr[28]);
else
System.out.print(","+arr[x]);
}
}
}
请各位大神指教。。。
作者:
芝麻糊
时间:
2015-9-18 17:38
递归方法:
以前用C++写的,不过应该不影响观看, cout << 是打印
int Fib(int n)
{
if(1 == n || 2 == n)
{
return 1;
}
else
{
return Fib(n-1) + Fib(n-2);
}
}
int main()
{
cout << Fib(30);
return 0;
}
作者:
芝麻糊
时间:
2015-9-18 17:41
再来个迭代,楼主的代码不够简洁,也是用C++写的,
int a[n+5] 是以前做题时担心出现数组越界耽误时间 所以总是把数组定义略大一些,请无视
int main()
{
int n = 30;
int a[n+5];
a[0] = 0;
a[1] = 1;
for(int i=2;i<=n;i++)
{
a[i] = a[i-1] + a[i-2];
}
cout << a[n];
return 0;
}
作者:
xiaoya0o0o
时间:
2015-9-18 18:46
我是这么写的
public class Test1 {
public static void main(String[] args) {
/*
* 思路:
* 从前10项可以看出,第一项和第二项都为1,而之后的都是它的前两项之和,
* 比如:第三项对应的数字=第一项+第二项,第四项对应的数字=第三项+第二项等等
* 所以从上面分析可知用递归比较简单
* 递归:其实就是功能的重复使用,但是每次该功能被调用参数都变化(使用了上一次运算的结果)
* 1,函数自身调用自身。
* 2,一定要定义条件,否则.StackOverflowError。栈溢出。
* 3,注意:递归次数过来容易溢出。
*/
// 定义一个变量,并给其赋值30
int num = 30;
// 定义一个打印的方法,并带参数
print(num);
}
/**
* 打印每一项对应的值,传入的参数为int类型
* @param num
*
*/
private static void print(int num) {
// 定义一个变量
int j = 0;
// 循环遍历出num值中的每一项
for(int i=1;i<num;i++){
// 定义一个方法,传一个实参,用于计算,并将计算的结果返回
j = show(i);
// 将每一项和相对应的结果打印出来
System.out.println("第 "+i+" 项"+",对应的数字是 "+j);
}
}
/**
* 计算具体的每一项对应的值,传入的参数为int类型,并返回一个int类型的值
* @param n
* @return
*/
private static int show(int n) {
// 判断,当n=1和n=2的时候值为1
if(n==1 || n==2){
return 1;
}else{
// 如果n>2的时候,它的值为紧挨着它的前两项的和
return show(n-1)+show(n-2);
}
}
}
作者:
夏木南生
时间:
2015-9-18 22:01
这个还是可以
作者:
安仔
时间:
2015-9-18 22:22
芝麻糊 发表于 2015-9-18 17:38
递归方法:
以前用C++写的,不过应该不影响观看, cout
让我想起熟悉的#include<iostream>了,哈哈
作者:
hei军
时间:
2015-9-23 15:34
这是就业班的测试题吗
作者:
heshiwei
时间:
2015-9-23 16:02
非常不错,学习了,复习了大一的知识。
作者:
迷茫不堪的年纪
时间:
2015-9-23 16:54
看到 用了数组。for循环, if(表达式) {输出语句} else 的知识点
作者:
流觞曲水
时间:
2015-9-23 21:14
太麻烦了,可以直接递归搞定,除前两项外,每一项都是前两项的和:fun(n)=fun(n-1)+fun(n-2);第一项和第二项是递归的出口。
作者:
StormPeng
时间:
2015-9-23 21:16
斐波那契数列是什么东西。。这是就业班入学的题么?怎么看都不觉得像基础班的。。
作者:
劲爆对策
时间:
2015-9-23 22:07
public class SLT {
// 递归方法
public static int feibo(int n){
// 这是出口
if(n==1||n==2){
return 1;
}
// 这是规律
return n=feibo(n-1)+feibo(n-2);
}
public static void main(String[] args) {
// 调用
System.out.println(feibo(7));
}
}
作者:
lostyou
时间:
2015-9-23 22:21
谢谢分享 学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2