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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涵风 中级黑马   /  2014-1-9 18:28  /  1805 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        一列数的规则如下: 1、1、2、3、5、8、13、21、34......  求第30位数是多少.编程实现。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

16 个回复

倒序浏览
   public int GetNumberAtPos(int pos)
        {
            if (pos == 0 || pos == 1)
            {
                return 1;
            }
            int res = GetNumberAtPos(pos - 1) + GetNumberAtPos(pos - 2);
            return res;
        }
或者
private static int GetNumber(int index)
      {
           if (index <= 0)         //控制负数和0  
          {
              return 0;
         }
          int a1 = 1;
           int a2 = 1;
           int count = 3;          //递归(循环)条件  
            RecursionGetNumber(index, a1, ref a2, count);
          return a2;
      }

评分

参与人数 2技术分 +2 收起 理由
电脑大牛 + 1 很给力!
茹化肖 + 1

查看全部评分

回复 使用道具 举报
static void Main(string[] args)
        {//一列数的规则如下: 1、1、2、3、5、8、13、21、34......  求第30位数是多少.编程实现。
            Console.WriteLine("你想求第几位?");
            int i=Convert.ToInt32(Console.ReadLine());
            int[] num=new int[i];
            num[1] = 1;
            num[2] = 1;
            for (int j = 3; j < i; j++)
            {
                num[j] = num[j - 2] + num[j - 1];
            }
            Console.WriteLine(num[i-1]);
            Console.ReadKey();

        }

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
斐波那契数列,递归方式
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             
  6.             Console.WriteLine(fibo_1(30));
  7.             Console.ReadKey();
  8.         }

  9.         public static int fibo_1(int pos) //利用递归求斐波那契数列
  10.         {
  11.             if (pos == 1 || pos == 2) //如果pos为1或2 直接返回1,否则递归求出第pos个斐波那契数列
  12.                 return 1;
  13.             else
  14.                 return fibo_1(pos - 1) + fibo_1(pos - 2);
  15.         }
  16.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
斐波纳契数列不是每一项是前两项的和吗?怎么你们用的都是某一项的项数减1加上项数减2,这明显到后面就错的啊,斐波纳契数列第二十项都到6765了啊
回复 使用道具 举报
斐波拉契数,用递归,可以参考谭浩强的C语言教程,好像是函数那一章,那里面有很详细的解答
回复 使用道具 举报
林成彬 发表于 2014-1-9 22:02
斐波纳契数列不是每一项是前两项的和吗?怎么你们用的都是某一项的项数减1加上项数减2,这明显到后面就错的 ...

仁兄,你理解错了
回复 使用道具 举报

噢,我明白了,我理解错了,看错了,现在明白了
回复 使用道具 举报
斐波拉契数,递归很容易实现。
回复 使用道具 举报
dlwcg 中级黑马 2014-1-11 14:28:31
10#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace 斐波那契序列
  6. {
  7.     class Program
  8.     {
  9.         //一列数的规则如下: 1、1、2、3、5、8、13、21、34......  求第30位数是多少.编程实现。
  10.         /// <summary>
  11.         /// 这个,不仅求出该项的值,而且还利用斐波那契序列本身求出来了加至该项的和。
  12.         /// 有不明白的再回帖
  13.         /// </summary>
  14.         /// <param name="n"></param>
  15.         /// <returns></returns>
  16.         static int Fibonacci(int n)
  17.         {
  18.             if (n < 3) return 1;
  19.             return Fibonacci(n - 1) + Fibonacci(n - 2);
  20.         }
  21.         static int FibonacciSum(int n)
  22.         {
  23.             if (n < 3) return n;
  24.             return FibonacciSum(n - 1) + Fibonacci(n);
  25.         }
  26.         static void Main(string[] args)
  27.         {
  28.             while (true)
  29.             {
  30.                 Console.Write("请输入项的索引:");
  31.                 int x = Convert.ToInt32(Console.ReadLine());
  32.                 Console.WriteLine("序列中该项的值为:" + Fibonacci(x));
  33.                 Console.WriteLine("序列中至该项的和为:" + FibonacciSum(x));
  34.             }
  35.         }
  36.     }
  37. }
复制代码

评分

参与人数 2技术分 +2 收起 理由
电脑大牛 + 1 很给力!
茹化肖 + 1

查看全部评分

回复 使用道具 举报
yuanlianxi03 发表于 2014-1-9 20:56
斐波那契数列,递归方式
  1. //通过递归算法
  2.         static int isPos(int pos)
  3.         {
  4.             if (pos == 0 || pos == 1)
  5.             {
  6.                 return 1;
  7.             }
  8.             else
  9.             {
  10.                 return isPos(pos - 1) + isPos(pos - 2);
  11.             }
  12.         }   
复制代码


回复 使用道具 举报

如果题中的是从第0个为开始的话,我的那个得修改成你的这个样子
我是以常规第1个为开始进行实现的
回复 使用道具 举报
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(GetNum(30));
            Console.ReadKey();
        }

        /// <summary>
        /// 求得当前位数 数值
        /// </summary>
        /// <param name="i">第多少位</param>
        /// <returns></returns>
        public static int GetNum(int i)
        {
            if (i <= 0)
                return 0;
            else if (i > 0 && i <= 2)
                return 1;
            else return GetNum(i - 1) + GetNum(i - 2);
        }
    }
求得 结果为:832040   
求版主加技术分 ,为的就是报名黑马12期~~

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 放课后小朋友 于 2014-1-16 22:59 编辑

自己使用一个简单的数组就可以搞定:
public class JiShuFen6 {
        static void f(){
                int[] arr=new int[100];
                arr[0]=1;
                arr[1]=1;
                for(int i=0;i<arr.length;i++){
                        arr[i+2]=arr+arr[i+1];
                        if(i==29){
                                System.out.println("第30位是:"+arr);
                                break;
                        }
                }
        }
        public static void main(String[] args) {
                f();
        }
}

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1 很给力!

查看全部评分

回复 使用道具 举报
上面的帖子有问题!下面更正一下:
  1. public class QiuShu {
  2.         static void f(){
  3.                 int[] arr=new int[100];
  4.                 arr[0]=1;
  5.                 arr[1]=1;
  6.                 for(int i=0;i<arr.length;i++){
  7.                         arr[i+2]=arr[i]+arr[i+1];
  8.                         if(i==29){
  9.                                 System.out.println("第30位是:"+arr);
  10.                                 break;
  11.                         }
  12.                 }
  13.         }
  14.         public static void main(String[] args) {
  15.                 f();
  16.         }
  17. }
复制代码
回复 使用道具 举报
  1. int[] xulie = new int[1000];
  2. xulie[1] = 1;
  3. xulie[2] = 1;
  4. Console.WriteLine("需要哪个位置上的数字?");
  5. int pos = Convert.ToInt32(Console.ReadLine().Trim());
  6. for(int i=3;i<1000;i++)
  7. {
  8.     xulie[i] = xulie[i - 1] + xulie[i - 2];
  9. }
  10. Console.WriteLine("第{0}个位置上的数为{1}", pos, xulie[pos]);
复制代码

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1 很给力!

查看全部评分

回复 使用道具 举报
这是一道逻辑题!
1,1,2,3,5......是一个典型的斐波那契数列。
我这里有一个方法你可以参考使用。
public static int[] fibonacciSequence(int n)
{
  int arr[] = new int[n];
  arr[0] = 1;
  arr[1] = 1;
  for(int i = 2; i < n; i++)
  {
   arr[i] = arr[i - 1] + arr[i - 2];
  }
  
  return arr;
}
此方法,返回的是整个数组,拿到返回值去最后一位,就是你要的答案。
此方法思路源于题:
/**
* 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   
* 1.程序分析:   兔子的规律为数列1,1,2,3,5,8,13,21....   
*/
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马