算法和斐波那契数列

原创 2013年12月02日 11:09:55

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

           此两例考察是的是算法。从第一个例子来看,从1开始报数,报到14的这个人就要退出。那么每次退出的人都是偶数,然后其他人重新开始,从1报数,到14退出。那么我们可以想象一下退出的一次为:14、28、42等。

思路:首先,定义一个数组  

            其次,给函数赋值,并传参,再调用     

           判断这个人的唯一性。

package com.itheima;

import java.util.Arrays;

public class Test10 {
/**
* 10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,
* 从1报数,到14退出。问:最后剩下的是100人中的第几个人?
* @param args
*/
public static int count=0;//出局的人
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum=100;
int exit=14;
sumExit(sum,exit);//调用判断方法
}

public static void sumExit(int sum,int exit)
{
int[] arr=new int[sum];//创建数组长度为sum
for(int i=0;i<sum;i++)//双重循环
{
for(int j=0;j<exit;j++)
{
count++;//每数一个人,自增
if (j>0)
have(i,arr);//调用是否存在的方法
if(count>sum)
{
count=1;//重新赋值,因为count大于总人数
have(i,arr);
}
}
arr[i]=count;//退出的人
}
System.out.println("退出的顺序为:"+Arrays.toString(arr));
System.out.println("最后剩下的人为:"+arr[sum-1]);
}
public static void have(int n,int[] arr)
{
for(int x=0;x<n;x++){
for(int y=0;y<n;y++)
{
if (count==arr[y])
count++;//判断是否唯一,存在就加一
}

}
}

}


package com.itheima;


import java.util.Scanner;

求斐波那契数列

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
这个数列从第三项开始,每一项都等于前两项之和。


public class Test3 {


/**
* 3、求斐波那契数列第n项,n<30斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
* @param args
*/
//本题采用递归的方法,求出第N项的值
public static void main(String[] args) {
// TODO Auto-generated method stub

int n;
for (int i=1;i<=10;i++)
{
n=PBN(i);//采用递归
System.out.print(n+"-");//输出前十项
}
System.out.print("请输入N:");
Scanner in=new Scanner(System.in);//输入你想获得那一项的值
n=in.nextInt();
System.out.print("值为:"+PBN(n));
}
public static int PBN(int x)
{
if(x<=1)
return x;//如果值为1,则返回1
else
return PBN(x-1)+PBN(x-2);
}


}

兔子数列:兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?

我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对
两个月后,生下一对小兔对数共有两对
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对
------
依次类推可以列出下表:
经过月数
0
1
2
3
4
5
6
7
8
9
10
11
12
幼仔对数
1
0
1
1
2
3
5
8
13
21
34
55
89
成兔对数
0
1
1
2
3
5
8
13
21
34
55
89
144
总体对数
1
1
2
3
5
8
13
21
34
55
89
144
233
幼仔对数=前月成兔对数
成兔对数=前月成兔对数+前月幼仔对数
总体对数=本月成兔对数+本月幼仔对数
可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。
除了具有a(n+2)=an+a(n+1)的性质外,还可以证明通项公式为:an=(1/√5)*{[(1+√5)/2]^n-[(1-√5)/2]^n}(n=1,2,3.....)



---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


















斐波那契数列的递归算法与非递归算法

一、斐波那契数列 由于斐波纳挈数列是以兔子的繁殖引入的,因此也叫“兔子数列”。它指的是这样一个数列:0,1,1,2,3,5,8,13......从这组数可以很明显看出这样一个规律:从第三个数开始,后...
  • qq_33951180
  • qq_33951180
  • 2016年09月09日 09:22
  • 7412

斐波那契数列累加求前n项和

斐波那契累加求前n项和 写一个斐波那契求和的算法,第一反应太简单了,递归一下就求出来了 常规的方法:...
  • diaoaa
  • diaoaa
  • 2014年05月18日 20:13
  • 3177

斐波那契数列的递归与循环的算法实现

前半篇转载地址:http://blog.csdn.net/woshisap/article/details/7566946 斐波那契数列,但凡学过编程的童鞋们应该都懂,背景就不介绍了(就是大兔...
  • Micro_Ryan
  • Micro_Ryan
  • 2015年08月22日 09:31
  • 4312

走台阶问题运用递推和斐波那契数列C/C++源码实现

/* 题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少种跳法。 */ #include #include using namespace std; //计算...
  • gongwenkai90
  • gongwenkai90
  • 2014年08月08日 14:33
  • 911

时间空间复杂度(二分查找和斐波那契数列)

时间复杂度 空间复杂度 折半查找 斐波那契数列 递归法
  • lilian_xy
  • lilian_xy
  • 2017年06月02日 17:29
  • 683

跳台阶问题和斐波那契数列

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。...
  • SilenceDXY
  • SilenceDXY
  • 2017年11月28日 14:51
  • 71

4阶斐波那契数列算法(使用循环队列实现)

  • 2017年04月26日 15:52
  • 16KB
  • 下载

递归算法算斐波那契数列

  • 2008年11月01日 21:28
  • 297B
  • 下载

【算法】斐波那契数列的计算方法

题目: 计算斐波那契数列。具体什么是斐波那契数列,那就是0,1,1,2,3,5,8,13,21,34,55,89,144,233。要求: 时间复杂度尽可能少分析: 给出了三种方法: 方法1:递归...
  • dongrixinyu
  • dongrixinyu
  • 2018年01月03日 19:14
  • 19

斐波那契数列取模(大数)分治算法

斐波那契数列取模(大数)分治算法 这是算法课程上完分之策略后老师留的一道题目: 菲波那契数列如下:1,1,2,3,5,8,13,21,34......其中a[1] = 1, a[2] = 1,...
  • wangran51
  • wangran51
  • 2013年04月01日 17:03
  • 7347
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法和斐波那契数列
举报原因:
原因补充:

(最多只允许输入30个字)