Ma spiegatemi una cosa, a detta dell'OP gli esercizi erano scrivere delle funzioni con 1 (uno) parametri ciascuna, due interi ed una stringa, quando è comparso il bisogno di 2 (due) parametri nelle funzioni intere, di cui uno un array di interi?
https://forum.tomshw.it/threads/programmi-con-ricorsione-c.767767/#post-7219379Ma spiegatemi una cosa, a detta dell'OP gli esercizi erano scrivere delle funzioni con 1 (uno) parametri ciascuna, due interi ed una stringa, quando è comparso il bisogno di 2 (due) parametri nelle funzioni intere, di cui uno un array di interi?
#include <iostream>
using namespace std;
int divisione(int a, int b);
int main(){
int a,b;
do{
cin>>a ;
cout<<endl;
cin>>b;
cout<<endl;
}
while(a < 0 || b < 0);
cout<< divisione(a,b);
}
int divisione(int a, int b){
if (a == 0)
return 0;
if(b == 0)
return -1;
return 1+divisione(a-b,b);
}
// Massimo comun divisore
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;
int mcd (int x, int y)
{
if (y==0)
return x;
else
return mcd(y,x%y);
}
int main()
{
int x;
cin>>x;
int y;
cin>>y;
cout<<mcd(x,y);
}
/*
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;
int mcd(int m, int n)
{if (m==n)
return m;
else
if (m>n)
return mcd(m-n, n);
else return mcd(m, n-m);
}
int main()
{
int m;
cin>>m;
int n;
cin>>n;
cout<<mcd(m,n);
}
*/
[CODE]
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;
int numeroprimo(int n, int div);
{
if (n==1)
return 0;
if (div==1)
return 1;
if ((n%div)>0))
return numeroprimo (n, div-1);
return 0
}
Ok, scusaI primi 3 esercizi nel post di inzio li ho risolti, ora vorrei capire meglio l'esercizio ricorsivo della divisione, del mcd e del numero primo.
Nel programma della divisione ci sono un paio di errori, credo. Riscriviamone la funzione, spiegandola (a parte che se chiunque abbia dato questo esercizio è un sadico:) ). Partiamo da un fatto: 10:2=5
Come alle elementari dicono che la moltiplicazione è un insieme di somme la divisione sarà un insieme di sottrazioni, fino a che esse sono possibili, vediamola come tale.
10, 2. 10>=2? Si, faccio 1 sottrazione e me la segno (risultato++)10-2=8, 2
8,2, 8>=2? Si, faccio una sottrazione e me la segno (risultato ++) 8-2=6, 2
...4,2
...2,2
2>=2? Si, faccio una sottrazione e me la segno (risultato ++) 2-2=0, 2
0,2. 0>=2? NO, quindi NON faccio la sottrazione e ho finito, ritorno al livello precedente e, sommando tutti i "e me lo segno" ottengo il risultato
Come vedi ho ottenuto il risultato, segno in 2,2+4,2+6,2+8,2+10,2=5 segno=5
E se fosse stato 11? È questo l'errore nella funzione, centra con il primo if di uscita
Post unito automaticamente:
Ok, scusa
Si risali ma cosa ottieni??
Intendo dire ripeto hai
return 1+divisione(a-b,b)
se lo leggo io capisco aggiungo 1 alla divisione di a-b/b
che tradotto sarebbe 1+ (10-2)/2= 1+4= 5 questo comunque è il concetto e il risultato
Se e fosse esempio 9 e 4 , oppure 4 e 9 ?
#include <iostream>
using namespace std;
int divisione(int a, int b);
int main(){
int a,b;
do{
cin>>a ;
cout<<endl;
cin>>b;
cout<<endl;
}while(a < 0 || b < 0);
cout<< divisione(a,b);
}
int divisione(int a, int b){
if (a == 0 && b == 0)
return -1;
if(b == 0)
return -2;
if (a<b)
return 0;
return 1+divisione(a-b,b);
}
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;
int numeroprimo(int n, int div);
{
if (n==1)
return 0;
if (div==1)
return 1;
if ((n%div)>0))
return numeroprimo (n, div-1);
return 0
}
[CODE]