次のようなコードを書きました。これは、atcorderのABC081B Shift only という問題です。
再帰が終点に達した時、counterという変数の値を、関数内(つまり、ChangeNumber関数のif文の所のcout)で出力すると期待する値が返ってきます。
ところが、main関数内部で、cout << ChangeNumber (0,N,A);とすると0と出力されてしまいます。
この理由が全くわかりません。
ちなみに、例えばcout << ChangeNumber (1,N,A);といじっても0が出力されます。
#include <iostream> using namespace std; int ChangeNumber(int counter,int num, int arry[]); int main(){ int N; int A[202]; cin >> N; for (int i = 0; i < N; i++){ cin >> A[i] ; } cout << ChangeNumber (0,N,A)<<endl; return 0; } int ChangeNumber(int counter,int num, int arry[]){ int flag = 0; for (int i = 0; i < num; i++){ if (arry[i]%2 == 1) { flag = 1; break; } } if (flag == 1) { cout <<counter<<endl; return counter; } for (int i = 0; i < num; i++){ arry[i] /= 2; cout << arry[i] <<" "; } cout << counter; cout << endl; ChangeNumber(counter+1,num,arry); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。