Вот код для треугольника Паскаля. Он должен работать, добавляя два над числами в строке n-1 для каждого нового числа в строке «n» (в треугольнике). Когда я даю число «4», я ожидаю видеть :
1 3 3 1. Но вместо этого я вижу: 1.
Как это получается?
#include<iostream>
using namespace std;
void fanc(int a[],const int m,int n){
if(n==1){
a[0]=1;
}
if(n==2){
a[0]=1;
a[n]=1;
}
else{
a[0]=1;
a[n]=1;
for(int i=1;i<n;i++){
fanc(a,100,n-1);
a[i]=a[i-1]+a[i];
}
}
return;
}
int main(){
const int m=100;
int a[m],n;
cin>>n;
fanc(a,100,n);
for(int i=0;i<n+1;i++){
cout<<a[i]<<'\t';
}
system("PAUSE");
return 0;
}
Есть несколько вещей:
Вторая переменная fanc () не имеет смысла, поэтому вы можете удалить ее.
Вы хотите использовать только fanc () n раз, но в этом случае каждый раз, когда вы используете fanc (), fanc () используется еще n-1 раз, поэтому fanc () используется около n! раз во всем.
Каждый раз, когда вы выполняете
a[i]=a[i]+a[i-1]
значение [i] изменяется, поэтому в следующий раз, когда вы его используете, оно не будет тем значением, которое вы хотели. Вы должны поместить результат в другой массив, чтобы избежать этого.
Вот код, который я изменил:
#include<iostream>
using namespace std;
void fanc(int a[],int n){
if(n==0)
return;
if(n==1){
a[0]=1;
return;
}
fanc(a,n-1);
int b[100];
b[0]=1;
for(int i=1;i<n-1;i++)
b[i]=a[i]+a[i-1];
b[n-1]=1;
for(int i=0;i<n;i++)
a[i]=b[i];
return;
}
int main(){
const int m=100;
int a[m],n;
cin>>n;
fanc(a,n);
for(int i=0;i<n;i++){
cout<<a[i]<<'\t';
}
system("PAUSE");
return 0;
}