今天在写javascript的一个函数时。用了下递归。但是一直都是返回的都是undefined。十分不解。百般思索之后终于发现问题所在。
在用递归时,我没有用return调用递归。
简单的说就是,
例:如下的Fibonacci数列就是返回的undefined。
function Fibonacci(n){
if(n==1){
return 1;
}else if(n==2){
return 1;
}else{
Fibonacci(n-1)+ Fibonacci(n-2);
}
}
所以对于有返回值的函数的递归调用一定要记得加上return。一下为正确方法
function Fibonacci(n){
if(n==1){
return 1;
}else if(n==2){
return 1;
}else{
return Fibonacci(n-1)+ Fibonacci(n-2);
}
}
郁闷啊。在这种问题上浪费了这么多的时间。
像javascript这种动态语言真的受不了一点点的错误。无提示,无报警。一旦有错,想破脑袋也想不到。
分享到:
相关推荐
在递归调用中,每一级函数调用都有自己的变量,递归调用就相当于又从头开始执行函数的代码。每次函数调用都会返回一次,并且按顺序逐级返回递归。 在递归调用中,我们需要注意递归的深度和性能问题。递归调用的深度...
在C语言中,递归调用可以通过函数的返回值来实现。例如,在函数f中调用函数f自身,直到达到某个条件为止。例如: ```c int f(int x) { if (x == 0) return 1; else return 2 * f(x - 1); } ``` 这个函数将计算x的...
每次函数调用自身时,它都会在新的上下文中执行,直到达到基本情况(base case),即不再进行递归调用的条件。递归函数必须有明确的基本情况和递归情况,否则会导致无限递归,最终耗尽系统资源。 递归在处理具有...
尾递归是指递归调用是函数体的最后一个操作,且返回值不依赖于递归调用的结果。这种情况下,编译器可能能够优化掉不必要的栈空间分配,降低空间复杂度。 总之,C语言中的递归函数提供了一种优雅的解决问题的方法,...
2. 基本情况:递归函数必须有一个或多个基本情况,这些情况可以直接返回结果,不需要进一步的递归调用。 3. 递归步骤:除了基本情况外,函数的每次调用都必须以某种方式简化问题,使它更接近基本情况。 递归函数的...
如果函数的返回值类型是void,即无返回值函数,那么不能在调用函数中使用return语句来获取返回值。否则,会出现编译错误。 函数的类型可以是int、float、char等,也可以是void,即无返回值函数。函数的类型需要和...
函数的嵌套调用是指在一个函数中调用另一个函数,而递归函数是指函数调用自身的函数。匿名函数是指没有函数名的函数。 Python 中的函数可以分为四种类型:无参数,无返回值的函数;无参数,有返回值的函数;有参数...
函数的调用有几种不同的方式,包括普通调用、嵌套调用和递归调用。普通调用是最基础的形式,需要确保函数名匹配、实参数量和类型与形参一致。C语言要求函数必须先定义后调用,除非函数返回类型为int或char,这种情况...
8. 函数返回值的类型在定义函数时决定,由定义函数时的return类型指定。 9. 当数组名作为参数传递给函数时,实际传递的是数组的首地址,而不是数组的长度、元素个数或元素值。 10. C语言中数组下标的下限通常是0,...
"C语言第8章函数习题.pdf" 本资源主要讲解C语言中的函数习题,...* 函数的调用关系可以是递归调用,也可以是非递归调用。 * 函数的调用关系取决于函数的定义和调用。 * 函数的调用关系可以影响程序的执行结果和性能。
- **返回值**:确保每次递归调用都有返回值是非常重要的,这有助于将递归的结果正确地传递回调用栈。 - **效率问题**:递归虽然简洁优雅,但可能会导致大量的函数调用开销,从而降低程序的运行效率。 #### 五、结论...
函数可以分为有返回值函数和无返回值函数两种。函数类型在定义函数时,对函数类型的说明,应与return语句中、返回值表达式的类型一致。 函数的调用 函数的调用是指在程序中使用函数名和参数列表来调用函数。函数...
在本节中,我们将讨论函数设计的原则、函数定义、函数对象的增加和删除、函数的递归调用、尾递归等知识点。 一、函数设计原则 在编写函数时,有很多原则需要参考和遵守: 1. 不要在同一个函数中执行太多的功能,...
当`return`语句执行时,程序控制权返回到调用者,并将返回值(如果有的话)传回。返回值可以是表达式的计算结果,例如: ```c int maxOfTwo(int a, int b) { if (a > b) return a; else return b; } ``` 4....
3. 为了避免无限递归,必须确保所有递归调用都有终止条件。 4. 使用动态内存分配的函数要记得释放,防止内存泄漏。 通过深入理解函数调用模型,我们可以更好地组织和优化C语言程序,提升程序的效率和可读性。在...
2. **正确的返回路径**:在递归调用之前,使用`return`语句确保返回值能够正确传递。 3. **避免副作用**:尽量减少递归函数中的副作用(如修改外部变量),这会使调试和理解函数行为变得更复杂。 4. **效率考虑**:...
- 当`n`大于0时,函数将`n`除以2得到`m`,然后递归调用`F(m)`,并将结果乘以`n`。 这种设计使得函数能够处理各种输入值,并基于这些条件作出相应的计算或返回值。然而,值得注意的是,该递归函数可能并不具备实际...
- **函数作为表达式的一部分调用**:在这种情况下,被调用的函数需要有一个具体的返回值。 #### 函数调用的分类 函数调用根据其性质可以进一步细分为**嵌套调用**和**递归调用**。 ##### 嵌套调用 嵌套调用是指...
函数嵌套调用可以实现复杂的逻辑操作,但需要注意避免递归调用。 七、函数类型 在C语言中,函数类型可以是void、int、char、float等。函数类型需要在函数定义时指定,否则将默认为int类型。 八、系统函数 系统...