使用递归(c)查找数字之和,+和 -

时间:2017-01-21 18:21:17

标签: c recursion sum

我需要找到一个数字序列的总和,+和 - ,同时只使用递归(不允许使用循环)。

我只能更改函数,仅此更改,包括函数中的指针(并且不能向其添加任何其他内容)。 我也不允许使用除stdio.h之外的任何其他库。

#include <stdio.h>

#define MAX_LENGTH 100

int calc_sum_string(char *s);

int main() {
    char s[MAX_LENGTH];
    scanf("%s", s);
    printf("%d", calc_sum_string(s));
    return 0;
}

int calc_sum_string(char *s) {
int sum = s[MAX_LENGTH];
if (*s == '\0'){
    return sum;
}
if (*s == '+'){
    sum = calc_sum_string(s-1)+ calc_sum_string(s+1);
}
if (*s == '-'){
    sum = calc_sum_string(s+1) - calc_sum_string(s-1);
    return sum;
}

输入:7-8+9
输出:8

3 个答案:

答案 0 :(得分:0)

#include <stdio.h>

#define MAX_LENGTH 100

//Stringification
#define S_(n) #n
#define S(n) S_(n)

int calc_sum_string(char *s);

int main(void){
    char s[MAX_LENGTH+1];

    scanf("%" S(MAX_LENGTH) "s", s);
    printf("%d", calc_sum_string(s));

    return 0;
}

int calc_sum_string(char *s){
//It is assumed that there is no space character in the character string.
//The string is not changed within this function.
    int n, len;

    if (*s == '\0' || 1 != sscanf(s, "%d%n", &n, &len)){
        return 0;
    }
    return n + calc_sum_string(s + len);
}

答案 1 :(得分:0)

您目前的代码有几个问题。您需要首先解决的问题包括:

  • 您永远不会使用任何数字来创建基本值:7,8和9永远不会被解释为数字。您唯一的基本案例返回0,因此这是您的代码能够达到的唯一结果。
  • 你的+和 - 案例中的代码相同:处理没有区别。
  • 您在递归调用中引用字符位置s-1和s-3。这些将向后移动到不属于字符串的内存中。你需要走向字符串的末尾。

修复这些项目。如果您仍然遇到问题,请给我们正确发布您剩余的问题,我们将帮助您克服困难。

答案 2 :(得分:0)

谢谢大家, 这是我的最终代码

#include <stdio.h>
#define MAX_LENGTH 100

int calc_sum_string(char *s);

int main()
{
char s[MAX_LENGTH];
scanf("%s", s);
printf("%d", calc_sum_string(s));
return 0;
}

int calc_sum_string(char *s)
{
if(*s == '\0')
    return 0;
if (*s == '+'){
    return *(s+1) + calc_sum_string(s+2) - '0';
}
else if (*s == '-'){
    return -(*(s + 1) - '0') + calc_sum_string(s+2);
}
else {
    return *s - '0' + calc_sum_string(s+1);