C程序使用递归和递归来计算n个自然数的差是必须使用的

  • 本文关键字:递归 自然数 计算 程序 归来 c
  • 更新时间 :
  • 英文 :


我写了代码,但得到了错误的输出。例如,当我输入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步数。

最新更新