在邮件列表和在线讨论中经常出现的主题之一是进行计算机科学学位的优点(或缺乏).似乎一次又一次地为负面派对提出的论点是,他们已编码了若干年,他们从未使用过递归.
所以问题是:
我需要将返回值存储在变量中.
我想知道如何修复此代码.我知道如果b的值为3,我会得到值= 2,但如果函数执行多次迭代,我就会被识别出来.我读到我应该使用回调或其他东西,但我不知道如何,也解释为什么我的代码不起作用,我应该如何解决它.(当然这段代码是出于演示的目的,好像我会告诉你它原来可能会让人感到困惑.)非常感谢!
var b = 70;
function myfunction() {
b--;
if (b < 3) {
return b;
} else {
myfunction();
}
}
value = myfunction();
console.log(value);
Run Code Online (Sandbox Code Playgroud) 请在以下代码中解释recursion语句的工作原理.
int factR(int n) {
int result;
if(n==1) return 1;
result = factR(n-1) * n;
return result;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是:
在上面的语句中,该factR(n-1)
方法调用自身直到结束.假设我们想得到6的阶乘,它将作为参数发送给这个方法.它将作为参数接收n
,n
然后将检查其值; 如果是1那么将返回1.但是如果它不是1,就像我们的情况那样它是6,则递归语句将运行.
现在我遇到的问题是第一次n-1
变为5并且乘以n,其保持值6,然后它变为30.现在30将GO在哪里?
然后该方法将调用自身,此时间n-1
变为4,然后它乘以n
IF保持值"6"然后4*6 = 24,我认为这是错误的.因为如果我们经历这种方式,那么在下一次调用中,进程将是类似的,n-1
将变为3*n,其中IF保持相同的值,即6然后它将变为3*6 = 18.然后下一次调用发生并且n-1
变为2我们乘以并假设它n
保持值6然后2*6 = 12,并且最后调用n-1
= 1*n = 6.我的观点是很明显n-1
会减小值,n-1
即6-1 = 5然后5-1 = 4然后4-1 = 3然后3-1 = 2和2-1 = 1.但问题是,n
每当方法调用自身时,它的值是多少?
如果你说当第一次乘法发生时,即"n-1"变为5然后乘以6 = 30而30则存储在"n"然后在下一次调用中5-1 = 4*30 = 120,然后4- 1 = 3*120 = 360,然后3-1 …
我突然处于一个递归语言类(sml)中,并且递归对我来说还不是很合理.我正在考虑方形瓷砖的地板有时是整数乘法的模型或隐喻的方式,或者Cuisenaire Rods是加法和减法的模型或模拟.有没有人可以分享任何这样的模型?
void func(int num){
if(num< 3){
printf("%d ", num);
func(num+ 1);
printf("%d ", num);
}
}
Run Code Online (Sandbox Code Playgroud)
假设我用func(0)调用这个函数.为什么结果为0 1 2 2 1 0?我不知道为什么它在减少.
我对Java编程比较陌生,我刚刚开始学习递归,但我似乎无法弄清楚这种方法是如何工作的.
private static int mystery(int w) {
{
if (w < 0) return 0;
int x = mystery (w-2);
return w - x;
}
}
Run Code Online (Sandbox Code Playgroud)
每当输入100这样的变量时,输出50.当输入200时,输出100.当输入2时,输出2.当输入25时,输出13.我不确定这种方法是如何工作的,我正试图绕过它.
我目前查看它的方式,如果你输入100,它将绕过第一个return语句,因为它大于0.当它到达第二行时,它会做100-2,这会带来98,然后转到第三行并执行100 - 98 = 2.然后返回到原始呼叫.
我知道我搞砸了神秘(w-2)方法的第二行.我假设它会再次将w-2的结果带回到方法的开头,并且它将继续一遍又一遍地执行该方法,直到w小于0,无论答案如何都应该再次输出0.但事实并非如此,我不知道为什么.
谁能解释一下这里发生了什么?
如果给出n = 20,则下面的方法返回5.
我的问题是每次迭代1如何递增?
mystery(10) + 1
= mystery(5) + 2
= mystery(2) + 3
= mystery(1) + 4
= mystery(0) + 5 = 5.
Run Code Online (Sandbox Code Playgroud)
我在递归方面遇到了一些困难.
public static int mystery(int n){
if(n <= 0){
return 0;
}else{
return mystery(n / 2 ) + 1;
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下程序
public static int doSomething(int num){
if(Math.abs(num) > 9){
return (1 + doSomething( num / 10));
}
else{
return 1;
}
}
public static void main(String[] args){
System.out.println(doSomething(333));
}
Run Code Online (Sandbox Code Playgroud)
这就是我理解它的方式.如果数字是333.
333 / 10
给我33
.从33> 9开始,它再次运行递归循环给我3
.在3之后它进入else条件.
我不明白为什么它打印3作为答案.
我是java新手,所以仍然试图理解基础知识.
我不相信这个问题是重复的.作为初学者,我的问题要简单得多.我相信的问题是使用javascript而不是java.
我是 C++ 新手,想知道什么时候应该使用 new,什么时候不应该使用,例如“int x = 5”或“int * x = new int(5)”。我知道新在堆中保留内存,因此在块结束时不会被删除,但由于保存地址的变量将在块之外变得不可访问,我看不到任何好处。
例子:
if(x) {
int * z = new int(5);
// Do something
}
// At this point the 5 is saved somewhere but since z is unaccessible I can't use it.
Run Code Online (Sandbox Code Playgroud)
补充:这个问题没有重复,因为其他问题只解释了什么是堆,而没有描述它的好处。