0
votes

Essayer d'obtenir la somme de l'élément de tableaux récursivement

J'essaie de trouver la somme des éléments d'un tableau de matrice récursivement sur C ++.

#include <bits/stdc++.h>

using namespace std;

int findSum(int arr[], int b, int e)
{
    if(b == e)
        return arr[b];
    else
    {
        int mid = (b + e) / 2;
        int x = findSum(arr, b, mid);
        int y = findSum(arr, mid, e);

        return x + y;
    }
}

int main()
{
    int arr[] = {1, 6, 3, 10, 11, 4, 5, 9, 15, 2};

    cout << findSum(arr, 0, 9);

    cout << endl; system("pause");
    return 0;
}


3 commentaires

Les enceintes de ceci (où vous partitionnez) ont besoin d'un examen approfondi. Vous avez un petit ensemble de données. Obtenez un papier et un crayon et dessinez, ligne par ligne, dans un arbre, que se passe-t-il exactement avec chaque récursivité. Ensuite, une seule étape dans un débogueur pour confirmer ou assaillir votre conclusion de papier.


BTW pourquoi utilisez-vous un moyen compliqué de résumer récursivant les éléments? Pourquoi pas simplement: FindSum (arr, i + 1)


@Davidespataro, pouvez-vous s'il vous plaît expliquer plus avec un code


3 Réponses :


1
votes

essayer de faire tout ce qui est de récursivement en C ++ est dangereux. Le programme YouT serait à risque d'un débordement de pile, car il comporte de multiples doublons d'une fonction remplissant la pile, poussant plus grand à chaque fois qu'il s'appelle lui-même.

Ainsi, voici comment vous pouvez le faire itérativement: < Pré> xxx


2 commentaires

FFS, si nous allons cette route, pourquoi pas seulement utiliser std :: COUT << std :: accumulez (std :: begin (Arr), std :: fin (arrondie), 0) << ' n ';


N'a pas pensé à ça: D Désolé



0
votes

où le problème est dans votre code a été bien expliqué dans la réponse de Vladfrommoscow .


Quoi qu'il en soit, une solution récursive plus simple pour la somme des éléments d'une collection:

Vous pouvez conserver une variable vous indiquant quel index de la matrice que vous envisagez pour le moment et quand c'est Plus grand que la taille de la matrice, vous pouvez retourner 0 c'est-à-dire l'élément neutre pour la somme.

sinon, vous avez simplement une somme arr [i] à La somme du repos de la matrice. xxx

Je trouve plus facile sur les yeux =)


2 commentaires

Ce n'est pas l'approche utilisée par l'auteur de la question.


@Vladfrommoscow Je ne le mettez pas comme une réponse car il lui posa explicitement pour cela dans les commentaires.



1
votes

Votre fonction est incorrecte. Par exemple, si le tableau n'a qu'un seul élément, la fonction renvoie 0.

En dehors de ceci si le tableau contient deux éléments, vous passez des indices B = 0, E = 1. L'indice intermédiaire est égal à 0 (( B + E) / 2 == 0) Et vous appelez à nouveau de manière récursive la fonction avec les mêmes valeurs B = 0 et E = 1. Donc, il y a donc une récursion infinie.

Vous devez spécifier la plage en tant que [Commencer l'index, index après le dernier].

mais dans tout cas, la fonction peut être écrite plus simple. Les indices YWO sont redondants.

ci-dessous Il existe un programme démonstratif qui montre comment la fonction peut être écrite. xxx

La sortie du programme est xxx


1 commentaires

N'aimez pas vraiment que retour , réfléchissez à 3 instructions retour dans si Les blocs seraient plus faciles sur les yeux. Upvoté de toute façon - bonne réponse!