递归-在主体中声明变量或将其用作参数
Recursion - Declaring variable in the body or use it as a parameter?
这个递归函数与有什么区别
int foo (int n,int sum)
{
if (n==0)
return sum;
int temp;
cin>>temp;
return foo(n-1,sum+temp);
}
int main()
{
...
...
foo(n,0);
...
...
}
这个:
int foo (int n,int sum, int temp)
{
if (n==0)
return sum;
cin>>temp;
return foo(n-1,sum+temp,temp);
}
int main()
{
...
int temp;
foo(n,0,temp);
...
...
}
在空间复杂性方面,哪一个更有效?它们有什么区别吗?我们可以说,当递归调用生成参数的副本时,在函数中声明变量与将其用作参数是一样的吗?
从内存消耗的角度来看,函数参数与本地变量相同。也就是说,从内存消耗的角度来看,这两种变体之间没有区别,除了在main
中引入了一个完全不必要的局部变量。
然而,第二种变体可能在时间上效率较低,因为在每一级递归中,您都会将temp
的当前值向下传递到下一级递归。该值根本没有被使用(从main
接收到的值甚至没有被初始化),这意味着将其传递到那里所花费的任何CPU努力都被完全浪费了。
相关文章:
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 扩展可变参数模板中的变量名称
- 在类构造函数中定义结构变量的参数
- 带有整数的变量参数列表
- 转发变量参数列表以模拟 std::thread
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- 存储稍后要转发的变量参数
- C++具有模板成员变量的类. 和参数内存输出
- 我应该如何在没有变量的情况下将相同的参数传递给 CMAKE 中的多个目标?
- 为变量模板的每个参数调用模板函数
- 具有推导参数的模板函数指针数组变量
- 函数参数变量总是需要 & 或 * 运算符吗?
- 为什么 beginthreadex 线程参数变量在父线程中没有更新
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- 如何在函数中使用非参数变量?
- 即将将引用作为函数中的参数传递以更改参数变量的值
- 基于不断变化的参数/变量的XML get值
- cocos2d-x v3 CallFunc作为参数/变量如何
- 在编译时使用c++元编程中的运行时参数(变量)
- 我可以返回一个非参数变量吗?