C
1int t = 1; 2void a(void) { 3for(int i=0;i<n;i++) { 4 printf("hello\n"); 5 t++; 6} 7 if(t <4) a(); 8}
上記の場合、再帰を2回呼ぶので計算量はO(n^3)だと思うのですが、どのくらいになるのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/20 04:52
2019/04/29 08:29
回答5件
0
n がどこにもないのでコンパイル・エラー。
... n > 4 だったら止まらないんじゃないコレ?
[修正後あらためまして]
n を増やしつつ、a()が何度呼ばれるか調べてみた。
C
1#include <stdio.h> 2 3int t = 1; 4int n = 5; 5int count; 6 7void a(void) { 8 ++count; 9 for(int i=0;i<n;i++) { 10 t++; 11 if(t <4) a(); 12 } 13} 14 15int main() { 16 for (n = 1; n < 10; ++n ) {; 17 t = 1; 18 count = 0; 19 a(); 20 printf( "n= %d\t count= %d\n", n, count); 21 } 22} 23 24/* 実行結果 25n= 1 count= 3 26n= 2 count= 6 27n= 3 count= 9 28n= 4 count= 12 29n= 5 count= 15 30n= 6 count= 18 31n= 7 count= 21 32n= 8 count= 24 33n= 9 count= 27 34*/
ふむ、呼ばれる回数が処理時間と比例するだろうから、計算時間量は O(n) みたいね。
投稿2019/04/18 12:03
編集2019/04/20 05:55総合スコア16614
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 02:30
2019/04/19 03:11
2019/04/20 04:54 編集
2019/04/20 05:47
2019/04/20 05:52 編集
0
コードは参考にならないので置いといて、読んでみてわからないなら動かしてみればわかるんじゃないですか?
ループ内にカウンタを入れて n を変化させて呼び出した時、計算回数が n に無関係なら O(1) で n に比例するなら O(n) で n^2 に比例するなら O(n^2)
実際にはきっちり比例しなくてもだいたいどのグラフに近いかで判断します。
投稿2019/04/19 04:41
総合スコア28660
0
本題ではないですが、他の人の回答を見て思ったので
大前提ですが、O(n)⊂O(n ^ 2)⊂O(n ^ 3) ですよ。
つまり、O(n)に属すならば、O(n ^ 2)にもO(n ^ 3)にも属すわけです。質問者は以下のように質問しています。
O(n^3)だと思うのですが、どのくらいになるのでしょうか。
O(n)に属するならばこれに対する回答はYesです。理由はどうあれ。
まあそれ以前にプログラム自体なにかおかしいので、多分全体像がみえないと答え出ないでしょうが・・・
投稿2019/04/20 15:53
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
質問者さんのコードが意味不明なので、再起の基本を教えます。
下記のコードで試してみて下さい。
デバックしてないのでエラー出たらごめんなさい。
int count = 1; void a(int n) { for(int i = 0; i < n; i++) { count++; a(n - 1); } } int main(void){ a(10);//ここの値変更すると面白いよ。 printf("%d\n",count); }
投稿2019/04/19 03:11
編集2019/04/19 06:08総合スコア3307
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 04:29
2019/04/19 04:51 編集
2019/04/19 05:19 編集
2019/04/19 05:27
2019/04/19 05:35
2019/04/19 05:44 編集
2019/04/19 06:03 編集
2019/04/19 06:01
2019/04/19 06:04
2019/04/19 06:11
2019/04/19 06:26
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。