Java 斐波纳契/数学 Involvement/No 包

Java Fibonacci /Math Involvement/No Packages

我一直遇到这个问题:

我必须编写一个递归方法来解决任意两个整数的乘法问题,无论是正数还是负数。

在此之前,我写了一个方法,它是序列的一部分,另一个方法和我的问题做同样的事情,但它只适用于正数:

我卡在 Fib3,

我应该将 -7 乘以 8 但是,

因为 B 大于 0,

它自动输入刚好是-7的A(结果应该是-56)

这是我的代码:

public class P4_Icel_Murad_Fibonacci
{
   private int N;
   private int result;
   private int A; 
   private int B;
   private int result2;
   private int result3;
    P4_Icel_Murad_Fibonacci(){
  }
   int Fib1(int N){
     if (N == 1 || N == 0){
        return N;
        }else if (N >= 1){
            result = Fib1(N-1) + Fib1(N-2);
            result = Fib1(N-1) + Fib1(N-2);
            result = Fib1(N-1) + Fib1(N-2);
            result = Fib1(N-1) + Fib1(N-2);
        }
     return result;
  }
  int Fib2(int A, int B){
      if ( A == 1 || B == 1){
          return A;
        }else if ( A >= 0 && B >= 0){
          result2 =  (A + 2) * Fib2(A-3,B);
        }
        return result2;
    }
  int Fib3(int A, int B){
      if ( A >= 0 || B >= 0){
          return A;
        }else if ( A < 0 || B < 0){
          result3 =  (A) * Fib3(A-3,B);
        }
        return result3;
    }
}

Driver:

public class Driver
{   
    public static void main(String[] args){
        P4_Icel_Murad_Fibonacci create = new P4_Icel_Murad_Fibonacci();
        System.out.println("Fib(11) = " + create.Fib1(11));
        System.out.println("7 * 8 = " + create.Fib2(7,8));
        System.out.println("-7 * 8 = " + create.Fib3(-7,8));
    } 
}

OR 语句的真值表似乎是你的问题。 由于您的代码声明

 if ( A >= 0 || B >= 0){
           return A;

它将去 return A 因为 B >= 0 的 OR 条件得到满足。 也许想出更清晰的 IF 语句?

我不确定OP是否正确描述了问题。

我会做类似的事情:

int multiply(int a, int b) {
    if(b==0){
        return 0;
    } else if (b > 0){
        return a + multiply(a, b-1)
    } else { // b < 0; 
        return -a + multiply(a, b+1)
    }
}

这是递归的,处理正数和负数。它真的不是很有效,你可能想确保 abs(b) 小于 abs(a) 所以你可以添加一行:

if( abs(a) < abs (b)){
   return multiply(b,a)
}

首先要至少确保它不会对 0 * 1,000,000 进行一百万次迭代。

显然,这是一种糟糕的乘法方式,但它似乎可以解决 OP 所描述的问题。