【问题标题】:Recursion with Pointers in CC中的指针递归
【发布时间】:2018-05-01 14:09:06
【问题描述】:
    #include <stdio.h>
    int x=2,y=4,z=17,w=3,count=0;

    void p(int z,int *x){
        *x= 3*z - *x;
        int  w=*x+z;
        printf("%d %d %d %d \n",*x,y,z,w);
        if(*x<=y){
           p(*x+1,&w);         
           printf("%d %d %d %d \n",*x,y,z,w);
        }
     }                          


   int main(void){

       p(1,&x);
       printf("%d %d %d %d \n",x,y,z,w);
       return 0;
    }

我尝试手动运行此代码以获取输出,但我手动生成的结果与我编译和执行它时的输出不同。 谁能详细解释一下程序的输出是如何创建的?

应该给出的输出是

1 4 1 2 
4 4 2 6 
9 4 5 14 
4 4 2 9 
1 4 1 4 
1 4 17 3

【问题讨论】:

  • 手工得到什么结果?
  • 这是一个写得很糟糕的递归,很难理解。除了迷惑别人,它还有其他目的吗?
  • 我手动得到 1 4 1 2 \ 4 4 2 6 \ 9 4 5 14 。之后我不知道如何继续。这是考试中的练习。
  • 你可以用你的调试器来看看你的代码在做什么......

标签: c function pointers recursion


【解决方案1】:

如果你想手动处理这个,你应该在纸上画一个堆栈,并在每次递归调用之前压入 x、y、z、w 的值,最后弹出它们。由于我们在过程中有一个递归调用,我认为这很容易做到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2010-10-02
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多