2016-09-21 82 views
-1

私のプログラムは現在、正の整数の素因数分解を昇順に出力します。私は降順で数値を出力するように関数を設定する方法を理解しようとしています。再帰を使用した素因数分解

たとえば、showFactors(100)は現在 "2 2 5 5"を出力します。

代わりに "5 5 2 2"を出力します。

10 // Void function "showFactors" that takes in an int "number" and another  int "factor", which is initialized to 2 
11 void showFactors(int number, int factor = 2) 
12 { 
13 
14 if (number<2) //returns nothing if number<2 
15 { 
16  return; 
17 } 
18 if (number%factor==0) //modulus function is used to get prime factorization 
19 { 
20  cout<<factor<<" "; 
21  showFactors(number/factor, factor); //recursive call 
22 } 
23 else //if (number%factor != 0) //this modulus function is used in order to output factor !=2 
24 { 
25  showFactors(number, factor+1); 
26 } 
27 } 

coutのコールがどこに行くか、単に再配置することによって簡単に修正がなければならないような気がしますが、私はこれまで任意の運を持っていませんでした。

編集

:うん、それはそれだけで21行の後に行くべきではありませんライン20および21

+0

@prpを切り替えるのと同じくらい簡単でしたか? – vu1p3n0x

答えて

1
#include <iostream> 
using namespace std; 
void sf (int number,int factor=2) 
{ 
    if (number<2) 
     return; 
    if (number%factor == 0) 
    { 
     sf (number/factor,factor); 
     cout<<factor<<"\t"; 
    } 
    else 
     sf (number,factor+1); 
} 

int main() 
{ 
    sf (1729); 
    cout<<"\n"; 

    return 0; 
} 
+0

それは本当にシンプルだった、ありがとう。私は、再帰呼び出しの後に置かれた場合、その関数は決してcoutを呼び出すことができないという点で、再帰に関する誤解を抱いていました。 – Obamaa

関連する問題