【问题标题】:Recursive function for array integers数组整数的递归函数
【发布时间】:2013-11-05 14:51:31
【问题描述】:

我有一个函数,它接受一个数组a[] 及其长度n。我必须计算数组内数字的总和。我写了这个递归函数:

int somma(int a[], int n)
{
 if (n == 0) { return 0; }
 else {return a[n] + somma(a, n-1);}    
}

我在我的main() 中这样称呼它:

int main() {   

 int array[5], ris;

 printf("Type the numbers of the array: \n");

 for(int i=0; i<4; i++)
 { 
   scanf("%d", &array[i]); 
 }

 printf("\nThe sum is: %d.", somma(array,4));

 getch();
 return 0;
}

如果数组包含array = [2; 4; 7; 5],printf 必须显示 18 (2+4+7+5)。顺便说一下函数返回88,你能帮帮我吗?

我正在使用 wxDevC++。

【问题讨论】:

  • 别忘了a[0] 也是数组的一个元素,somma 会跳过它。

标签: c recursion


【解决方案1】:

您只读取数组中的前四个值。 array[4] 包含垃圾值

for(int i=0; i<5; i++) //change to 5
{ 
     scanf("%d", &array[i]); 
}

你的somma 函数也是错误的。它将始终为arr[0] 添加0

 if (n == -1) { return 0; } //change to this

【讨论】:

    【解决方案2】:

    你可以试试这个:-

    for(int i=0; i<=4; i++)
     { 
       scanf("%d", &array[i]); 
     }
    

    同时纠正你的睡姿

     if (n == -1) 
     { 
        return 0; 
     }
    

    【讨论】:

      【解决方案3】:

      如果数组有n 元素,那么最后一个元素的索引为n-1。像这样更正您的 somma 函数:

      int somma(int a[], int n) {
          if (n <= 0) { 
              return 0;
          }
      
          return a[n-1] + somma(a, n-1);    
      }
      

      此外,您的代码还有两个(小)问题:

      1. C89 不允许在 for 头部内的变量声明 for(int i=0; i&lt;4; i++),只有 C99 和 C++。可能 DevC++ 编译它是因为该文件被视为 C++,但您应该知道它不会在 GCC 上编译,除非您使用 -std=c99 开关。
      2. getch 是特定于 Windows 的。在 POSIX 系统上,请改用 getchar

      【讨论】:

      • 是的,你是对的。我已经更新了递归的退出条件。
      • 请注意,&lt;= 不是绝对必要的(== 可以),但它会避免在负 n 的情况下无限递归。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2017-03-27
      • 2022-01-22
      • 2018-06-29
      • 2015-10-23
      • 2013-01-15
      相关资源
      最近更新 更多