返回不返回C中的准确值

时间:2014-07-12 12:47:17

标签: c recursion return-value

我编写了这个具有递归函数不同的代码,当我运行它时,使用printf语句我注意到代码在正确的方向上执行,并且我得到了printf语句在不同结束时打印的所需值函数但该值不会立即返回,而是递归再次反向并返回错误的值。我一直在努力调试它,但我不明白为什么它执行最后一个printf语句后不会立即返回。请帮忙!! 要运行输入: 5 3 1 0 3 8 5 12 1 3 作为输入

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

long long int df;

long long max(long long int a,long long int b)
{
    long long int maxi;
    maxi = a>b ? a:b;
    return maxi;
}

long long min(long long int x,long long int y,long long int *a)
{
    long long int mini;
    mini = a[x]<a[y] ? (x+1):(y+1);
    return mini;
}

long long differ(long long int n1,long long int n2,long long int *a,long long int k,long long int n)
{
    long long int df,i;
    df=a[n1-1]-a[n2-1];
    df=abs(df);
    printf("%lld\n",df);

    if(df>k)
    {
        for(i=0;i<n;i++)
        {   
            if(max(a[n1-1],a[n2-1])>a[i] && (max(a[n1-1],a[n2-1])-a[i])<=k)
            {
                printf("%lld %lld\n",a[i],a[min(n1-1,n2-1,a)-1]);
                differ(i+1,min(n1-1,n2-1,a),a,k,n);
return df; //Even this does not work
            }
        }
    }
    printf("%lld 90909\n",df);/*This does print a required value but changes again and returns a wrong value finally.*/
    return df;
}

int main()
{
    long long int n,k,p,f1,f2,d=0,i,j;
    scanf("%lld",&n);
    long long int a[n];
    scanf("%lld",&k);

    scanf("%lld",&p);
    for(i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
    }
    while(p-- > 0)
    {
        scanf("%lld",&f1);
        scanf("%lld",&f2);
        printf("%lld df\n",d);

        d = differ(f1,f2,a,k,n);

        printf("%lld diff",d);
        if(d<=k)
        {
            printf("Yes\n");
        }
        else
        {
            printf("No\n");
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

将递归函数分配给df可以解决问题,即

df=differ(i+1,min(n1-1,n2-1,a,k,n);

希望它可以帮助那些在递归过程中遇到这个小错误的人。