在邮件列表和在线讨论中经常出现的主题之一是进行计算机科学学位的优点(或缺乏).似乎一次又一次地为负面派对提出的论点是,他们已编码了若干年,他们从未使用过递归.
所以问题是:
我看到,通过一个简单的例子是如何产生的斐波那契序列大多数编程语言教程教递归,我的问题是,有没有比产生Fibonacci序列解释递归是如何工作之外的另一个很好的例子?
可能重复:
递归函数的示例
我一直在努力研究编程中的递归作为一个概念(虽然我专门研究Java),这就是我最了解的东西:
例如,在现实生活中,递归是指我们将两个镜子放在彼此面前并且它们之间产生的图像是递归的.
但我没有在编程中得到这个算法?有人能给我一个简化的例子来理解递归吗?
我很确定我完全理解只有一个递归的方法是如何工作的。
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。所以 …