題組內容
一、考拉茲猜測(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_i(int n)(意即使用疊代方式),當輸入參數為正整數 n
時,計算並列出所有計算的數列。(10 分)
void collatz_i(int n) // 假設 n > 0
{
……
}
詳解 (共 2 筆)
詳解
void collatz_i(int n){
while(n!=1){
printf("%d, ",n);
if(n%2==0) n/=2;
else n=3*n+1;
}
printf("%d",1);
}
詳解
void collatz(int n){
while(1){
if(n==1){
printf("%d ",n);
return ;
}
if(n%2==1){
n=n*3+1;
printf("%d ",n);
}
if(n%2==0){
n=n/2;
printf("%d ",n);
}
}
}