黑马程序员技术交流社区

标题: 求数 [打印本页]

作者: 涵风    时间: 2014-1-9 18:28
标题: 求数
        一列数的规则如下: 1、1、2、3、5、8、13、21、34......  求第30位数是多少.编程实现。
作者: 右哼哼    时间: 2014-1-9 18:41
   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;
      }
作者: 一席倾城    时间: 2014-1-9 18:48
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();

        }
作者: yuanlianxi03    时间: 2014-1-9 20:56
斐波那契数列,递归方式
  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.     }
复制代码

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

仁兄,你理解错了
作者: 林成彬    时间: 2014-1-10 09:43
yuanlianxi03 发表于 2014-1-10 09:31
仁兄,你理解错了

噢,我明白了,我理解错了,看错了,现在明白了
作者: xu6148152    时间: 2014-1-10 19:16
斐波拉契数,递归很容易实现。
作者: dlwcg    时间: 2014-1-11 14:28
  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. }
复制代码

作者: 红鹰(Jake)    时间: 2014-1-14 23:40
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.         }   
复制代码



作者: yuanlianxi03    时间: 2014-1-15 19:40
红鹰(Jake) 发表于 2014-1-14 23:40

如果题中的是从第0个为开始的话,我的那个得修改成你的这个样子
我是以常规第1个为开始进行实现的
作者: -淡然一笑    时间: 2014-1-15 20:59
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期~~


作者: 放课后小朋友    时间: 2014-1-16 22:32
本帖最后由 放课后小朋友 于 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();
        }
}
作者: 放课后小朋友    时间: 2014-1-16 23:00
上面的帖子有问题!下面更正一下:
  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. }
复制代码

作者: 流失的温度0    时间: 2014-2-8 22:46
  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]);
复制代码

作者: 未烧开的白开水    时间: 2014-2-11 13:45
这是一道逻辑题!
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....   
*/





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2