创建使用递归的程序时遇到问题

时间:2019-12-30 18:36:50

标签: c function recursion sum definition

我正在尝试编写一个可以递归计算1 + 2 + 3 ... + n的程序。我刚开始学习C,所以我很糟糕。 这是我现在拥有的:

#include <stdio.h>
int adder;
adder=1;
int sum(int numba) {
    if (adder==numba) {
        return(sum);
    }
    return(sum+adder);
    ++adder;
}

int main() {
    char line[100];
    int nummba;
    printf("Enter in a number: ");
    fgets(line, sizeof(line), stdin);
    sscanf(line, "%d", nummba);
    printf("The sum of numbers from 1 to %d is %d.", nummba, sum(nummba));
    return(0);

}

显然不起作用... 如何使用递归求解1 + 2 + 3 ... n? 谢谢。

3 个答案:

答案 0 :(得分:2)

对于初学者而言,无需使用全局变量。

接下来是这些陈述

return(sum);

return(sum+adder);

sum是指向函数的指针。因此return语句的表达式没有任何意义。

此外,此代码段

int adder;
adder=1;

甚至不会编译,因为您可能不会在文件范围内使用语句。至少你应该写

int adder = 1;

该函数的外观如下

unsigned long long int sum( unsigned int n )
{
    return n == 0 ? 0 : n + sum( n - 1 );
}

这是一个演示程序。

#include <stdio.h>

unsigned long long int sum( unsigned int n )
{
    return n == 0 ? 0 : n + sum( n - 1 );
}

int main(void) 
{
    printf( "Enter in a non-negative number: " );

    unsigned int n = 0;

    scanf( "%u", &n );

    printf( "The sum of numbers from 0 to %u is %llu.\n", n, sum( n ) );

    return 0;
}

其输出可能看起来像

Enter in a non-negative number: 10
The sum of numbers from 0 to 10 is 55.

答案 1 :(得分:1)

递归要求函数调用自身。您没有这样做,因此首先没有递归函数。考虑以下代码:

#include <stdio.h>

int sum(int n) {
    if (n == 0)
        return n;
    else
        return n + sum(n - 1);
}

int main() {
    int n;
    char line[100];

    printf("Enter in a number: ");
    fgets(line, sizeof(line), stdin);

    sscanf(line, "%d", &n);
    printf("The sum of numbers from 1 to %d is %d.\n", n, sum(n));

    return(0);
}

如果现在发现递归有点困难,则可以使用while循环来选择难度较小的解决方案:

int sum(int n)
{
    int i = 0;
    int j = 1;

    while (j <= n)
    {
        i += j++;
    }
    return i;
}

答案 2 :(得分:0)

将代码更改为:

#include <stdio.h>
int sum_val=0;

void sum(int numba) 
{
    if(numba>=1)
    {
        sum_val=sum_val+numba;
        sum(numba-1);
    }
}

int main() 
{
    int nummba;
    printf("Enter in a number: ");
    scanf(" %d",&nummba);
    sum(nummba);
    printf("The sum of numbers from 1 to %d is %d.", nummba, sum_val);
    return(0);
}

您编译代码了吗?