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 所描述的问题。
我一直遇到这个问题:
我必须编写一个递归方法来解决任意两个整数的乘法问题,无论是正数还是负数。
在此之前,我写了一个方法,它是序列的一部分,另一个方法和我的问题做同样的事情,但它只适用于正数:
我卡在 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 所描述的问题。