我正在编写一个函数,它只是在表格内查找值。是否可以在其内部调用该函数?我看到了一些关于 this
和 self
的东西,但不太理解。
可以的,它被称为递归。
void foo(){
foo(); //This is legal.
}
当然你需要从递归函数中返回以避免无限递归调用。如果不返回,将会导致堆栈溢出。以下是一个更好的例子:
当然你需要从递归函数中返回以避免无限递归调用。如果不返回,将会导致堆栈溢出。以下是一个更好的例子:
void foo(int n){
if (n == 0)
return;
foo(--n);
}
n
最初为零,否则它永远不会返回。 n--
返回 n
并将其递减。 我认为你的意思是 --n
。 - cdhowie见 递归 (计算机科学) (维基百科)。
函数内调用函数的示例:
# include<stdio.h>
int factorial(unsigned int number)
{
if (number <= 1)
return 1;
return number * factorial(number - 1);
}
void main()
{
int x = 5;
printf("factorial of %d is %d",x,factorial(x));
}
其他人已回答了你的问题,但由于这对你来说是陌生的,你可能想要了解递归和递归函数。如果你不知道,可能会遇到一些棘手的问题。
其中最糟糕的是,如果你太深入或者你的函数堆栈分配了很多东西,你很快就会溢出堆栈。如果你计划使用递归实现,请确保你的递归是有界的,并且在堆栈上分配的最少。
你可能需要考虑迭代方法 - 每个递归问题都可以通过一些思考以迭代方式解决。这也通常是一个有趣的练习。
JoshLeaves说递归更快,但通常不是因为需要分配增长的堆栈并设置寄存器。如果你的函数调用自身两次或更多次来计算它的结果,那么迭代解决方案总是更快的。
更新
好的,我以为这是关于“获取每个函数值”的问题。正如其他帖子所说,这被称为递归。不过需要注意以下几点:
递归比迭代更快(我手头没有基准测试结果,但我在一年前在Intel Core i5上运行了它们)。
//Iteration
function do_stuff(i)
{
//BLABLAH
}
for (i = 0; i <5; i++) {
do_stuff();
}
//Recursion
function do_stuff(int i)
{
//BLABLAH
if (i < 5) {
do_stuff(i + 1);
}
}
char []
)。 OP只想调用一个递归函数;也许他想获取当前函数的函数指针。 - Adam Rosenfield
this
只在 C++ 中可用,而self
只在 Objective-C 中可用。它们都不是 C 语言。 :) - user142019