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

當不斷使用此演算法,所有的正整數終將會達到 1。例如:n = 11 時,其所計算的數
列如下:
11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
來計算新的 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);
}