2016-05-28 38 views
-1
// Define the recursive function. 
    int collatz(int p1) 
    { 
     // While Loop Starting 
     while (p1>1) 
     { 
     //when the number is even 
     if(p1%2==0) 
     { 
      p1 = p1/2; 
      printf("%d ", p1); 
     //using recursion 
      return collatz(p1); 
     } 
     // Case where number is odd. 
     elseif 
     { 
      p1 = 3*p1+1; 
      //print function 
      printf("%d ", p1); 
      //using recursion 
      return collatz(p1); 
     } 
     } 
    } 
    // Main body. 
    int main() 
    { 
     // Declare the variable and initialized it. 
     int p1= 4; 
     //print function 
    printf("User Entered value : %d\n", p1); 
     // Display the number 
     printf("%d\n", collatz(p1)); 
     //End 
     return 0; 
    } 

輸出:我得到的輸出爲: 2,1,1 我不應該得到的最後一個號碼1 repeated.Could請你糾正我在哪裏,我已經做了錯誤。請只做那些需要的。在Collat​​z序列獲得最後一個數字1重複

+0

1)C和C++是不同的語言。選一個! 2)這既不是C也不是C++。 3)見[問]。 – Olaf

+0

我寫過C – chandu

+0

那麼爲什麼要爲其他語言添加標籤?請編輯您的問題,尊重其他兩個問題。 – Olaf

回答

0

編譯C或C++程序時,應始終啓用警告。如果你這樣做,編譯器會警告你,你的函數collatz可能會終止而不返回值。 (如果參數是1,會發生什麼?)

這是未定義的行爲,在main函數中使用可能不存在的返回值也是如此。

所以這只是一個偶然的機會,它發生在主打印1。但是無論它打印什麼都是錯誤的,因爲您似乎期望輸出僅限於collatz中打印的內容。

您可以嘗試使用鉛筆和紙張玩電腦並執行您的功能。這不會花很長時間。當然,你也可以使用調試器。

+0

我在un Linux環境下工作。我是C編程新手。我不知道在VMware環境中在vmware機器上進行調試。 – chandu

+0

@chandu:是的,我懷疑這一點,這就是爲什麼我建議使用鉛筆和紙。但是,如果你對學習如何編程非常認真,那麼你最終必須要學會如何使用調試器。 – rici

+0

我需要在while循環中更正某些內容。 – chandu

相關問題