三种方法求解Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1,当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

最直接暴力的方式就是递归求解,但是消耗的时间太大,计算机的工作量大,但是代码简洁。
实例代码如下:

public class Fib {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		System.out.println(fib(n)%10007);
		}
	static int fib(int n) {
		if(n==1||n==2) return 1;
		return fib(n-1)+fib(n-2);
	}
		}

第一种方法是直接求出第n项后再求余数,显然消耗的时间太大,在竞赛中会导致时间超出而使答案不完全正确。因此,我们可以灵活变通一下,直接求出第n项的余数
第二种方法是利用数组来求解:
实例代码如下:

public class Fib {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int F[] = new int[n+2];
		F[1]=1;
		F[2]=1;
		if(n>2){
		for(int i=3;i<=n;i++){
		F[i]=(F[i-1]+F[i-2])%10007;//用来保存余数
		   }
		}
		System.out.println(F[n]);
	  }
	  	}

第三种方法是利用变量来传递值求出第n项:

public class Fib {
	public static int main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		 int n = scanner.nextInt();
		   int a = 1, b = 1, result = 0;
			if(n==1 || n==2) return 1;
			else {
			 for(int i = 3; i <= n; i++){
			        result  = (a+b)%10007;
			        a = b;
			        b = result ;
			    }
				return result;
		}
	 }
}
  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 斐波那契数列递推公式为:fn=fn-1+fn-2,其中f1=f2=1。当n比较大fn也非常大,我们需要求出fn除以10007余数。 我们可以使用动态规划的思来解决这个问题。我们定义一个数组f,其中f[i]表示斐波那契数列的第i个数除以10007余数。根据递推公式,我们可以得到以下代码: f[1] = f[2] = 1; for (int i = 3; i <= n; i++) { f[i] = (f[i-1] + f[i-2]) % 10007; } 最后,我们只需要返回f[n]即可。 ### 回答2: 斐波那契数列递推公式为:fn = fn-1 + fn-2,其中f1 = f2 = 1。为了求解fn除以10007余数,我们可以使用动态规划的方法。 首先,我们可以创建一个数组dp,用于存储每个斐波那契数列的元素对10007取余的结果。我们将dp[1]和dp[2]初始化为1,即dp[1] = dp[2] = 1。然后,我们可以使用一个循环来计算后续的斐波那契数列元素的余数。 具体的计算方法如下: 1. 循环从i = 3开始,直到i <= n结束。 2. 在每次循环中,计算dp[i]的值,即dp[i] = (dp[i-1] + dp[i-2]) % 10007。 执行完整的循环后,dp[n]的值即为fn除以10007余数。最后,输出dp[n]的值即可。 这种方法间复杂度是O(n),适合计算较大的n。下面是一个完整的示例代码: ```python def fibonacci(n): dp = [0] * (n+1) dp[1] = dp[2] = 1 for i in range(3, n+1): dp[i] = (dp[i-1] + dp[i-2]) % 10007 return dp[n] n = int(input("请输入n的值:")) result = fibonacci(n) print(f"fn除以10007余数为:{result}") ``` 通过运行以上代码,可以得到fn除以10007余数。 ### 回答3: 为了求解Fibonacci数列的第n项除以10007余数,我们可以使用递归的方法来计算。 首先,我们定义一个函数fibonacci(n),其中n表示要求解的项数。 根据递推公式fn=fn-1 fn-2,我们可以将递归公式转化为以下代码逻辑: - 如果n等于1或2,即n为初始项,则直接返回1。 - 否则,递归调用fibonacci(n-1)和fibonacci(n-2),并将结果相加,然后取结果除以10007余数,并返回。 用代码表示如下: ```python def fibonacci(n): if n == 1 or n == 2: return 1 else: return (fibonacci(n-1) + fibonacci(n-2)) % 10007 ``` 例如,求解fibonacci(10)除以10007余数,我们可以调用函数fibonacci(10),得到结果55。 注意:当n比较大,递归的方法效率并不高,会消耗较多的间和计算资源。如果要计算较大的项数,可以考虑使用循环迭代或动态规划等更优化的方法求解
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值