我编写了这个具有递归函数不同的代码,当我运行它时,使用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;
}
答案 0 :(得分:0)
将递归函数分配给df可以解决问题,即
df=differ(i+1,min(n1-1,n2-1,a,k,n);
希望它可以帮助那些在递归过程中遇到这个小错误的人。