我很确定我完全理解只有一个递归的方法是如何工作的。
Ex) 计算阶乘
public int factorial(int n){ //factorial recursion
if(n==0){
return 1;
}
else{
return n*factorial(n-1);
}
}
Run Code Online (Sandbox Code Playgroud)
对于这些方法,我什至可以想象堆栈中发生了什么以及在每个堆栈级别返回了什么值。
但是每当我遇到双重递归的方法时,噩梦就开始了。
下面是来自编码蝙蝠的双重递归的递归问题。
例如)给定一个整数数组,是否可以选择一组整数,使得该组和给定的目标相加?如果是,则为真。如果没有,则为假。您使用 3 个参数;起始索引start,一个 int Array nums,目标 int 值目标。
下面是这个问题的解决方案。
public boolean groupSum(int start, int[] nums, int target) {
if (start >= nums.length) return (target == 0);
if (groupSum(start + 1, nums, target - nums[start])) return true;
if (groupSum(start + 1, nums, target)) return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
我对这个解决方案的理解是这样的。假设我得到了一个数组 {2,4,8},起始索引 = 0,目标值为 10。所以 …
假设您有一个数组,其中第 i 个元素是给定股票在第 i 天的价格。
如果您可以无限次买卖(一次只能持有一只股票),但每次卖出都需要支付交易费,请计算您能获得的最大利润。
样本输入 { 1, 3, 7, 5, 10, 3 } 费用 = 3。
如果您进行两笔交易,总利润为 (7 - 1) - 3 + (10 - 5) - 3 = 5。如果您只进行一笔交易,总利润为 (10 - 1) - 3 = 6。
public int maxProfit(int[] prices, int fee) {}
Run Code Online (Sandbox Code Playgroud)
原始版本非常简单,但我不确定如何处理这个修改后的版本。谁能给我一些提示/指导?我正在研究面试的算法问题。