【发布时间】:2020-08-19 13:30:24
【问题描述】:
我正在尝试用 Java 编写一个递归方法来查找 2 的倍数的基数为 2 的日志。
我已经使用这种递归方法成功计算了日志。
import java.util.*;
class temp
{
static int log(int number)
{
if(number==1)
return 0;
return log(number/2)+1;
}
public static void main(String s[])
{
Scanner input=new Scanner(System.in);
System.out.println("Enter Multiple of 2:");
System.out.println("Log is:"+log(input.nextInt())); //calling log with return value of nextInt()
}
}
我搁浅的地方是尝试使用不同的方法来实现相同的程序,这种方法在递归调用中从 2 开始相乘,直到它等于给定的数字。这是我尝试过的:
class logarithmrecursion
{
static int step=1;
static int log(int number)
{
final int temp=number;
if(number>=temp && step!=1)
return 0;
step++;
return log(number*2)+1;
}
}
在第一次调用期间,number 等于 temp,所以我使用 step 变量来防止执行终止条件。如果我在递归调用中不使用“number”变量,我没有办法累加之前的乘积,但是 number 变量已经等于 temp 并且将在下一次递归调用中触发终止条件,因此总是给出输出 1。
我该怎么做才能使这个程序正常运行?
【问题讨论】:
-
我没有办法累积上一个产品这就是返回值的用途。
-
你需要把函数调用改成
int log(int current_val, int target),递归调用变成log(current_val*2, target),然后你从log(1, input.nextInt())开始。
标签: java recursion tail-recursion