我写了代码,但得到了错误的输出。例如,当我输入5时,我得到的输出是3,而应该是-5。请指出我的错误并给我一些解决办法。
#include <stdio.h>
int difference(int a);
int difference(int a)
{
if (a != 0)
{
return (a - difference(a - 1));
}
else
{
return 0;
}
}
int main()
{
int n;
printf("Enter number until which you want difference of:n");
scanf("%d", &n);
printf("The difference of numbers is %d", difference(n));
return 0;
}
我不知道你所说的是什么意思
数字的差异
您的程序所做的是计算给定数字除以2的四舍五入数。
输入结果 | |
---|---|
0 | 0 |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 3 |
6 | 3 |
7 | 4 |
8 | 4 |
这似乎是在家工作,只是错误原因:
d 5 = [a] 5 - d 4 = [k] 5 - 2 = 3
d 4 = [b] 4 - d 3 = [j] 4 - 2
d 3 = [c] 3 - d 2 = [i] 3 - 1
d 2 = [d] 2 - d 1 = [h] 2 - 1
d 1 = [e] 1 - d 0 = [g] 1 - 0
d 0 = [f] 0
坏算法,坏,坏。
如果两个数字之间存在差异:
int difference(int a, int b)
{
if (a == b)
{
return 0;
}
else if (a > b)
{
return 1 + difference(a - 1, b);
}
else //if (a < b)
{
return difference(b, a);
}
}
即使这是在家工作,一个解决方案:
int identityByRecursiveDifference(int a)
{
return a == 0 ? 0 : 1 + identityByRecursiveDifference(a - 1);
}
这里的差异是1。
int identityByRecursiveDifference(int a)
{
if a == 0 {
return 0;
}
int half = identityByRecursiveDifference(a / 2);
return 2 * half + (a % 2);
}
这里的差别是一半;精确地与偶数CCD_ 1或大约与奇数CCD_。CCD_ 3是除以2的余数。
较少的递归,不是a步骤,而是²loga步数。