输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值。
答案:6 悬赏:60
解决时间 2021-01-11 21:25
- 提问者网友:兔牙战士
- 2021-01-11 16:36
输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值。
最佳答案
- 二级知识专家网友:旧脸谱
- 2021-01-11 17:55
写一个短的,用递推的:(速度比较快)
int fibo(int n){
if(n<=2)return 1;
int a=1, b=1, c;
for(int i = 3; i<=n; c=a+b,a=b,b=c,i++);
return c;
}
还有一种数学方法:(直接出解,但可能有精度问题)
int fibo(int n){
return (int)((pow((1+sqrt(5))/2, (double)n)+pow((1-sqrt(5))/2, (double)n))/sqrt(5));
}
int fibo(int n){
if(n<=2)return 1;
int a=1, b=1, c;
for(int i = 3; i<=n; c=a+b,a=b,b=c,i++);
return c;
}
还有一种数学方法:(直接出解,但可能有精度问题)
int fibo(int n){
return (int)((pow((1+sqrt(5))/2, (double)n)+pow((1-sqrt(5))/2, (double)n))/sqrt(5));
}
全部回答
- 1楼网友:鱼忧
- 2021-01-11 23:00
void main()
{
int n;
scanf("%d",&n);
printf("%d",fib(n));
}
int fib(n)
{
if(n==1 || n==2)
return 1;
else return fib(n-1)+fib(n-2);
}
关键是递归调用追问用java做的
{
int n;
scanf("%d",&n);
printf("%d",fib(n));
}
int fib(n)
{
if(n==1 || n==2)
return 1;
else return fib(n-1)+fib(n-2);
}
关键是递归调用追问用java做的
- 2楼网友:底特律间谍
- 2021-01-11 22:04
我暂时保留我的看法!
- 3楼网友:英雄的欲望
- 2021-01-11 20:33
直接用递推的方法来解决
int main()
{
int fib[100] = {1, 1};
int n, i;
scanf("%d", &n);
if (n > 2)
{
for (i = 2; i < n; i++)
fib[i] = fib[i-2] + fib[i-1];
}
printf("fib = %d\n", fib[n-1]);
}
int main()
{
int fib[100] = {1, 1};
int n, i;
scanf("%d", &n);
if (n > 2)
{
for (i = 2; i < n; i++)
fib[i] = fib[i-2] + fib[i-1];
}
printf("fib = %d\n", fib[n-1]);
}
- 4楼网友:从此江山别
- 2021-01-11 19:44
eger
n=inputbox("请输入n的值:")
redim a(1 to n)
call Fibonacci a()
sub Fibonacci(a() as long)
dim i as integer,n as integer
n=ubound(a)
a(1)=1
a(2)=1
for i=3 to n
a(i)=a(i-1)+a(i-2)
next i
end sub
n=inputbox("请输入n的值:")
redim a(1 to n)
call Fibonacci a()
sub Fibonacci(a() as long)
dim i as integer,n as integer
n=ubound(a)
a(1)=1
a(2)=1
for i=3 to n
a(i)=a(i-1)+a(i-2)
next i
end sub
- 5楼网友:春色三分
- 2021-01-11 18:18
import java.util.Scanner;
public class Fibonacci {
private int fibonacciArrLength = 0;// 斐波那契数组长度
public boolean setFibonacciArrLength() {
Scanner in = new Scanner(System.in);
boolean b = false;
try {
fibonacciArrLength = in.nextInt();
if (fibonacciArrLength == 0) {
System.out.println("长度不能为0");
b = true;
}
} catch (java.util.InputMismatchException e) {
System.out.println("error 请输入数字");
b = true;
}
return b;
}
public int[] fibonacciArr() {
int[] fibonacciArr = new int[fibonacciArrLength + 1];
for (int i = 0; i < fibonacciArr.length; i++) {
if (i < 2) {
fibonacciArr[i] = i;
} else {
fibonacciArr[i] = fibonacciArr[i - 1] + fibonacciArr[i - 2];
}
}
return fibonacciArr;
}
public static void main(String[] args) {
Fibonacci fi = new Fibonacci();
boolean pd = false;
do {
System.out.print("请输入数列长度");
pd = fi.setFibonacciArrLength();
} while (pd);
System.out.println("长度为" + fi.fibonacciArrLength + "的数组:");
int[] arr = fi.fibonacciArr();
for (int i = 1; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
copy以后直接运行就行了 javaSE 1.6
public class Fibonacci {
private int fibonacciArrLength = 0;// 斐波那契数组长度
public boolean setFibonacciArrLength() {
Scanner in = new Scanner(System.in);
boolean b = false;
try {
fibonacciArrLength = in.nextInt();
if (fibonacciArrLength == 0) {
System.out.println("长度不能为0");
b = true;
}
} catch (java.util.InputMismatchException e) {
System.out.println("error 请输入数字");
b = true;
}
return b;
}
public int[] fibonacciArr() {
int[] fibonacciArr = new int[fibonacciArrLength + 1];
for (int i = 0; i < fibonacciArr.length; i++) {
if (i < 2) {
fibonacciArr[i] = i;
} else {
fibonacciArr[i] = fibonacciArr[i - 1] + fibonacciArr[i - 2];
}
}
return fibonacciArr;
}
public static void main(String[] args) {
Fibonacci fi = new Fibonacci();
boolean pd = false;
do {
System.out.print("请输入数列长度");
pd = fi.setFibonacciArrLength();
} while (pd);
System.out.println("长度为" + fi.fibonacciArrLength + "的数组:");
int[] arr = fi.fibonacciArr();
for (int i = 1; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
copy以后直接运行就行了 javaSE 1.6
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯