数学递归函数的算法

时间:2014-04-10 18:38:14

标签: java algorithm

我在下面遇到了一个问题但我没有得到解决方案因此寻求你的帮助。 函数GF定义如下

GF(A,B,0)=A
GF(A,B,1)=B
GF(A,B,N)= GF(A,B,N-1)+GF(A,B,N-2) where N>1

给定3个非负数A B N从除1000000007

返回余数
For example given A =3 B=4 n =5 the function should return 29 BECAUSE
GF(3,4,0)= 3 mod 1000000007 = 3
GF(3,4,1)= 4 mod 1000000007 = 4
GF(3,4,2)= (GF(3,4,0)+GF(3,4,1)) mod 1000000007 =7
GF(3,4,3)= (GF(3,4,1)+GF(3,4,2)) mod 1000000007 =11
GF(3,4,4)= (GF(3,4,2)+GF(3,4,3)) mod 1000000007 =18
GF(3,4,5)= (GF(3,4,3)+GF(3,4,4)) mod 1000000007 =29

空间复杂度O(N)时间O(Nlog N)

我正在寻找如何处理这个java伪代码或解决方案我尝试了4到5小时但未能继续前进因此寻求你的帮助

由于

1 个答案:

答案 0 :(得分:9)

我会为你提供如何解决问题的方法,这是你的功课,你应该向他们学习。

  1. 使用大小为n的数组。设为arrint[] arr = new int[n]
  2. 首先,使用arr初始化a,b的前2个元素:arr[0] = a % 1000000007 ; arr[1] = b % 1000000007 ;
  3. 然后使用for循环:n从2迭代到for (int i = 2; i < n; i++),并为每个迭代集arr[i] = (arr[i-1] + arr[i-2]) % 1000000007;
  4. 最后,数组的最后一个元素是所需的元素。
  5. 全部包装,你得到你的答案。祝你好运。