在递归过程中,C编译器如何处理堆栈中的局部变量?
我编写了一个简单的二进制搜索程序,遇到了一个问题,请参见下面的三个困惑:在递归过程中,C编译器如何处理堆栈中的局部变量?,c,recursion,stack,C,Recursion,Stack,我编写了一个简单的二进制搜索程序,遇到了一个问题,请参见下面的三个困惑: 如果我选择icc-g main.c或icc-O0 main.c代码返回错误答案,但如果我使用icc-O2 main.c我可以得到正确答案 当代码mid=(beg+end)/2时 返回[mid]-键
- 如果我选择
或icc-g main.c
代码返回错误答案,但如果我使用icc-O0 main.c
我可以得到正确答案icc-O2 main.c
- 当代码
mid=(beg+end)/2时在
一个问题是除非if(beg键)之前定义code> 返回[mid]-键<键-a[mid-1]?中期:中期1; 返回-1; } 内部主(空) { printf(“%d\n”,改进的二进制搜索(100,0,MAX-1)); 返回0; }
beg否则不初始化
一个问题是除非mid
beg您刚刚声明
但没有初始化它,否则不初始化mid
,如果第一个if条件(mid
if(beg您刚刚声明了
,但没有初始化它,如果第一个if条件(mid
if(beg)使用编译器警告,
用于icc,则可能发生这种情况。使用编译器警告,-Wall
用于icc。-Wall
#include <stdio.h> #define MAX 6 int a[MAX] = {1,2,3,4,5,6}; int improved_binary_search(int key, int beg, int end) { int mid, temp; //mid = (beg + end) / 2; if(beg <= end) { mid = (beg + end ) /2; if(a[mid] == key) return mid; if(a[mid] < key) return improved_binary_search(key, mid + 1, end); if(a[mid] > key) return improved_binary_search(key, beg, mid - 1); //printf("test is %d\n", mid); } if(mid == 0) return 0; if(mid == MAX - 1) return MAX - 1; if(a[mid] < key) return a[mid+1] - key < key - a[mid] ? mid+1 : mid; if(a[mid] > key) return a[mid] - key < key - a[mid-1] ? mid : mid-1; return -1; } int main(void) { printf("%d\n", improved_binary_search(100, 0, MAX - 1)); return 0; }