C语言用堆栈实现函数的嵌套调用和递归调用的全代码
时间: 2024-02-06 22:09:53 浏览: 91
C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。
以下是使用堆栈实现函数的嵌套调用和递归调用的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int stack[SIZE];
int top = -1;
void push(int data) {
if (top == SIZE-1) {
printf("Stack Overflow");
return;
}
top++;
stack[top] = data;
}
int pop() {
if (top == -1) {
printf("Stack Underflow");
return -1;
}
int data = stack[top];
top--;
return data;
}
int factorial(int n) {
push(n);
int result = 1;
while (top != -1) {
int num = pop();
result *= num;
if (num-1 > 0) {
push(num-1);
}
}
return result;
}
int fibonacci(int n) {
push(n);
int result = 0;
while (top != -1) {
int num = pop();
if (num == 0) {
result += 0;
} else if (num == 1) {
result += 1;
} else {
push(num-1);
push(num-2);
}
}
return result;
}
int main() {
int n = 5;
printf("Factorial of %d is %d\n", n, factorial(n));
printf("Fibonacci of %d is %d\n", n, fibonacci(n));
return 0;
}
```
在这个例子中,我们实现了两个函数,分别是阶乘和斐波那契数列。这两个函数都可以通过递归调用来实现,但是在这里我们使用堆栈来模拟递归调用。对于每个函数调用,我们将参数压入堆栈中,然后在while循环中不断弹出堆栈中的参数并计算结果,直到堆栈为空。这个方法可以避免递归调用所带来的函数调用栈溢出问题。
阅读全文