2012-01-31 181 views
3

所以我在这个程序挣扎,我试图找出如何使用一个 声明为main的指针数组,在递归函数中记住数据, 出现的问题这里是如果它是一个单一的指针相同的方法,那么对于一个结构类型呢? 通过引用变量/数组传递给递归函数的最佳方式是什么?c传递指针递归函数

#include <stdio.h> 
#include <stdlib.h> 
#define N 1 

void f(int i,int j,int *cnt); 

int j=0; 

int main(int argc, char *argv[]) 
{ 
    int *cnt=0; 
    f(0,++j,&cnt); 
    printf("------ %d ---- \n",cnt); 
    system("PAUSE"); 
    return 0; 
} 

void f(int i,int j,int *cnt){ 

    if(i>N){ 
      printf("---if --- %d ---- %d \n",i,j); 
      (*cnt)++; 
      return; 
      } 

    (*cnt)++; 
    printf("---bg --- %d ---- %d \n",i,j); 
    f(i+1,++j,cnt); 
    f(i+1,++j,cnt);   
} 

我想知道的另一件事情是怎么做的递归函数处理++ i和i ++和i + 1度的增量(当作为参数传递),

+0

该代码将无法编译。你还没有初始化'cnt'指向任何内存。 – 2012-01-31 00:49:40

回答

4
int main(int argc, char *argv[]) 
{ 
    int *cnt=0; 
    f(0,++j,&cnt); 
    printf("------ %d ---- \n",(*cnt)); 
    system("PAUSE"); 
    return 0; 
} 

需求是

int main(int argc, char *argv[]) 
{ 
    int intStorage = 0;//<---- As Oli said. 
    int *cnt= &intStorage; 
    f(0,++j,cnt);//<-------AMPERSAND removed, overly dereferenced. 
    printf("------ %d ---- \n",(*cnt)); 
    system("PAUSE"); 
    return 0; 
} 

++ i和i ++和i + 1(当作为参数传递):

  1. ++ i:i + 1已通过,同时也是我以后的价值。
  2. i ++:在通话结束后我通过了i = i + 1。
  3. 我+ 1:我+ 1通过,但我仍然只是我之后。

我试试给你的功能也一点点:

void f(int i,int j,int *cnt){ 

    if(i>N){ 
     printf("---if --- %d ---- %d \n",i,j); 
     return; 
    } 

    (*cnt)++; 
    printf("---bg --- %d ---- %d \n",i,j); 
    if (i < 50 && j < 50) { 
     f(i+1,++j,cnt); 
     f(i+1,++j,cnt); 
    } 
} 

还有很多递归的,但没有不停止的危险。

+0

确实。但是这个代码仍然会导致seg-fault。 – 2012-01-31 00:52:49

+0

我没有意识到递归函数也需要工作。哦,他们只是在无限递归中堆积起来。 – John 2012-01-31 00:56:14

+0

你应该得到一个编译警告 - 在main()调用'f()'的参数3的类型不匹配。你正在传递一个'int **',其中函数需要一个'int *'。 – 2012-01-31 01:03:50

2

处理指针到您的功能的简单方法是:

#include <stdio.h> 
#include <stdlib.h> 
#define N 1 

void f(int i, int j, int *cnt); 

int j = 0; 

int main(void) 
{ 
    int cnt = 0; 
    f(0, ++j, &cnt); 
    printf("------ %d ----\n", cnt); 
    return 0; 
} 

void f(int i, int j, int *cnt) 
{ 
    // Having a local variable j and a global j is likely to confuse someone! 
    if (i > N) 
    { 
     printf("---if --- %d ---- %d\n", i, j); 
     return; 
    } 

    (*cnt)++; 
    printf("---bg --- %d ---- %d\n", i, j); 
    f(i+1, ++j, cnt); 
    f(i+1, ++j, cnt); 
} 

此代码生成没有崩溃的输出如下:

---bg --- 0 ---- 1 
---bg --- 1 ---- 2 
---if --- 2 ---- 3 
---if --- 2 ---- 4 
---bg --- 1 ---- 3 
---if --- 2 ---- 4 
---if --- 2 ---- 5 
------ 3 ----