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 Réponses :
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: P> < Pré> xxx pré> p>
FFS, si nous allons cette route, pourquoi pas seulement utiliser std :: COUT << std :: accumulez (std :: begin (Arr), std :: fin (arrondie), 0) << ' n '; code>
N'a pas pensé à ça: D Désolé
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: p>
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 sinon, vous avez simplement une somme Je trouve plus facile sur les yeux =) p> p> p> 0 code> c'est-à-dire l'élément neutre pour la somme. p>
arr [i] code> à La somme du repos
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.
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. p>
Vous devez spécifier la plage en tant que [Commencer l'index, index après le dernier]. p>
mais dans tout cas, la fonction peut être écrite plus simple. Les indices YWO sont redondants. P>
ci-dessous Il existe un programme démonstratif qui montre comment la fonction peut être écrite. P> La sortie du programme est p>
N'aimez pas vraiment que retour code>, réfléchissez à 3 instructions code> retour code> dans
si code> Les blocs seraient plus faciles sur les yeux. Upvoté de toute façon - bonne réponse!
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 i> 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) code>
@Davidespataro, pouvez-vous s'il vous plaît expliquer plus avec un code