2016-07-23 6 views
0

は機能値は、関数の再帰呼び出しに

void solve(int arr[],int ind,int sum,int n,int count) 
{ 
    if(ind==n){ 
      if(sum>max) 
       max=sum; 
     } 
     else{ 
      sum+=arr[ind];//sum 
      if(ind==n-1) 
      solve(arr,ind+1,sum,n,1);//1st call 
      if(ind==n-2 && count>1) 
      solve(arr,ind+2,sum,n,1);//2nd call 
      if(ind<n-1 && count<2){ 
       count++; 
       solve(arr,ind+1,sum,n,count);//3rd call 
      } 
      if(ind<n-2) 
       solve(arr,ind+2,sum,n,1);//4th call 
      if(ind<n-3) 
       solve(arr,ind+3,sum,n,1);//5th call 
     } 
} 

は、私はロジックに関する問題がないが、variables.Iの受け渡しについて混乱していた整数sum+=arr[ind] //sumかどうかを作ることができないのです考えてみましょうすべての呼び出しで同じ変数として渡されるか、関数の呼び出しごとに更新されますか?

+0

Thnx ..私は答えを得ました...しかし@ user3386109 C++の答えはどういう意味ですか....それはCで違うのですか? – yobro97

+1

参照はC++の機能です。 Cでは、ポインタを使用します。 – user3386109

+0

Ok ...分かりました! – yobro97

答えて

2

sumが値渡しされるため、値は更新されません。次の5 solveコールは同じsum値で渡されます。あなたはsumは、各呼び出しの後に更新されるようにしたい場合は

、あなたは参照することにより、それを渡す必要があります。void solve(int arr[],int ind,int &sum,int n,int count)

1
sumの値が更新されますが、機能 solveを取得 locally毎回はcalled.Youは値を印刷して、これを可視化することができ

関数定義の中のsumの値。

次の例を参照してください。

#include <stdio.h> 
void call(int); 
int main(void) { 
    // your code goes here 
    call(5); 
    return 0; 
} 
void call(int sum) 
{ 
    if(sum>15) 
     return; 
    printf("%d ",sum); 
    sum+=5; 
    call(sum); 

} 

o/pは5 10 15です。

これは、より明確に視覚化するのに役立ちます。

関連する問題