繁体   English   中英

递归函数,取决于步骤数,给出不同的答案

[英]Recursive function, depending on number of steps, gives different answers

第一次来这里的用户,希望我不会错过与此类似的问题。

我遇到的问题是我们应该编写代码,该代码将使用递归函数来获取array(array1 [n]),然后创建第二个array(array2 [n]),其中array2的成员将是第一个数组中留给它们的所有正元素的总和。 array2 [0]为= 0,array2 [1] = array1 [0],array2 [2] = array1 [0] + array1 [1],...

问题是,我一直在尝试思考一种算法,但是我一直回到相同的代码,而且我也比以前更加困惑。 我想到了一些方法来更改递归以进行修复,但这使它变得更糟。

#include <stdio.h>
int sum(int array[], int tmp)
{
   if(tmp < 0)
       return 0;
   else
       return array[tmp] + sum(array, tmp-1);

}
int main()
{
   int n;
   scanf("%d",&n);
   int a[n], b[n], i, j;
   for(i = 0; i < n; i++)
   {
     scanf("%d",&a[i]);
     if(a[i] < 0)
         a[i] = 0;
   }
   b[0]=0;
   for(i=n-1;i>0;i--)
   {
     int sum1 = 0;
     for(j = i - 1; j >= 0; j--)
         sum1 += sum(a,j);

     b[i] = sum1;

   }
   for(i = 0; i < n; i++)
   {
     printf("%d ",b[i]);

   }


   return 0;
}

尝试这个:

#include <stdio.h>

int sum(int array[],int tmp){
    if(tmp<0)
        return 0;
    else
        return array[tmp] + sum(array, tmp-1);
}

int main(void){
    int n;

    scanf("%d",&n);
    int a[n], b[n+1], i, j;

    for(i = 0; i < n; i++){
        scanf("%d", &a[i]);
        if(a[i] < 0)
            a[i] = 0;
    }

    b[0] = 0;
    for(i = 0; i < n; ++i){
        b[i+1] = sum(a, i);
    }

    for(i = 0; i <= n; i++){
        printf("%d ", b[i]);
    }
    puts("");
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM