【问题标题】:How to calculate the number of recursive calls made to the Ackerman() function in C如何计算 C 中对 Ackerman() 函数的递归调用次数
【发布时间】:2015-08-31 02:12:02
【问题描述】:

我尝试编写此代码来计算 Ackerman 值以及函数被调用的次数。但是,计数器一直停留在 0。你能帮帮我吗?

/*
A(m,n) =    n+1, if m==0
A(m,n) =    A(m-1,1), if m>0 and n==0
A(m,n) =    A(m-1,A(m,n-1)), if m>0 and n>0
*/
#include<stdio.h>
static int w=0;
int ackerman(int m,int n)
{

    w=w+1;
    if(m==0)
        return n+1;
    else if(m>0 && n==0)
        return ackerman(m-1,1);
    else if(m>0 && n>0)
        return ackerman(m-1,ackerman(m,n-1));
}
int mainackerman()
{
    int m,n;
    scanf("%d %d",&m,&n);
    printf("%d %d",ackerman(m,n),w);
    return 0;
}

【问题讨论】:

    标签: c recursion global counter ackermann


    【解决方案1】:

    您有一个序列点问题。在您调用ackerman 的同一行上,您正在使用受该调用影响的值。这是未定义的行为。改为这样做:

    int result = ackerman(m,n);
    printf("%d %d", result, w);
    

    good question on StackOverflow 提供了一些与序列点相关的出色答案。和C++有关系,但是思路和C基本一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2021-09-15
      • 1970-01-01
      相关资源
      最近更新 更多