用递归思想,java代码实现下面这个题目:
 已知: f(0)=2;f(1)=3;f(n)=f(n+2)-2f(n+1);
 求f(20);
希望大家帮忙写下这个代码,谢谢了,我只知道用循环,但是不会用java表示那个表达式。

解决方案 »

  1.   

    public static void main(String[] args) throws Exception {
    System.out.println(fn(-1));
    }

    public static int fn(int n)
    {
    if(n==0)
    return 2;
    else if(n==1)
    return 3;
    return fn(n+2)-2*fn(n+1);
    }
    //楼主题目是不是给错了,这个fn(n+2)-2*fn(n+1)要改成
    fn(n-2)-2*fn(n-1)
      

  2.   

    是递归不会写,还是 f(n)这个表达式不知道怎么变化?递归要能将问题复杂度递减处理,也就是要将原等式:
      f(n) = f(n+2) - 2*f(n+1)
    变换为:
      f(n+2) = f(n) + 2*f(n+1)
    代入:m=n+2 调整后即:
      f(m) = f(m-2) + 2*f(m-1)现在应该会写递归了吧?
      

  3.   

    不知道该怎么用java写那个表达式,如果直接写成f(m-2) + 2*f(m-1),是错误的,编译都通不过。就像一楼的那种,刚开始就写过不行,有时候即使通过编译了,也是死循环。你能帮我写下代码么 ?谢谢了
      

  4.   

    我倒啊我2楼都说了,你核心问题是没有做等式变换,还不用我改过后的?
      f(m) = f(m-2) + 2*f(m-1)
    也即:
    public static int fn(int n) {
      if(n==0) return 2;
      else if(n==1) return 3;
      return fn(n-2)-2*fn(n-1);
    }
      

  5.   


    改个变量名呐public static void main(String[] args) throws Exception {
    System.out.println(fn(20));
    } public static int fn(int n) {
    if (n == 0)
    return 2;
    else if (n == 1)
    return 3;
    return fn(n - 2) + 2 * fn(n - 1);
    }
      

  6.   

    public static long fid(long m){
    if(m==0)
    return 2;
    if(m==1)
    return 3;
    else
    return fid(m-2)+2*fid(m-1);
    }                  
    像2楼说得那样 求n=20时 m=22就行了吧
      

  7.   

      package packa;import java.util.Scanner;public class Jaaaa
    { public Jaaaa()
    {
    // TODO Auto-generated constructor stub
    } public static void main(String[] args)
    {
    @SuppressWarnings("resource")
    Scanner scanner = new Scanner(System.in);
    System.out.print("函数f(n),计算n,请输入一个整数:");
    int tem = f(scanner.nextInt());
    System.out.println("得到的值为:" + tem);

    }

    public static int f(int n)
    {
    if (n == 0)
    return 2;
    else if (n == 1)
    return 3;
    else
    return f(n-2) + 2 * f(n - 1);
    }
    }
    不知道可以不,试验下,好像是对的
      

  8.   

    你可以看一下:
    import java.util.Scanner;public class ComputeF
    {
    public static void main(String [] args)
    {
    Scanner input = new Scanner(System.in); //输入一个数字
    System.out.println("input a number  m is(m<=20):");
    int m = input.nextInt();
    System.out.println("F number at index"+m+"is"+cm(m));}
    public static long cm(long m)//递归的实现
    {
    if(m ==0)
    return 2;
    else if (m ==1)
    return 3;
    else 
    return cm(m-2) -2*cm(m-1);
    }
    }
      

  9.   

    package org.iteye.bbjava.csdn.problems;public class SumByRecursion {
    public static int funtion(int i) {
    if (i == 0)
    return 2;
    else if (i == 1)
    return 3;
    else
    return (funtion(i - 2) + 2 * funtion(i - 1));
    }

    public static void main(String []args){
    int i = funtion(20);
    System.out.println(i);
    }}