題組內容

一、考拉茲猜測(Collatz conjecture):假設我們輸入一個正整數 n,並利用以下演算法
來計算新的 n 值:

當不斷使用此演算法,所有的正整數終將會達到 1。例如:n = 11 時,其所計算的數
列如下:
11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1

⑴試寫出一遞迴函式 collatz_r(int n),當輸入參數為正整數 n 時,計算並列出所有計
算的數列。(10 分)
void collatz_r(int n) // 假設 n > 0
{
……
}

詳解 (共 2 筆)

詳解 提供者:這似乎就是阿摩線上測驗的暱稱最多的字數了

void collatz_r(int n){

    if(n>1){

        printf("%d, ",n);

        if(n%2==0) n/=2;

        else n=3*n+1;

        collatz_r(n);

    }

    else printf("%d",1);

}

詳解 提供者:我要成功

void collatz(int n){

if(n==1)  return 1;
if(n%2==1)
return collatz(3*n+1);
else
return collatz(n/2);
}