人を殺して命を償わない(3 n+1)推測(c++)

834 ワード

テーマ分析
カラズ(Callatz)は、正の整数nのいずれかに対して、偶数であれば、半分を切ると推測している.奇数であれば(3 n+1)を半分切ります.こうやって切り落としを繰り返し、最後には必ずある一歩でn=1を得る.カラズは1950年の世界数学者大会でこの推測を発表した.当時、エール大学の教師と学生が一斉に動員され、馬鹿みたいで無邪気な命題を証明しようとしたが、学生たちは学業に専念せず、証明だけに専念していたという.陰謀だという人もいた.カラズは意図的にアメリカの数学界の教育と科学研究の進展を遅らせている......私たちの今日のテーマはカラズの推測を証明するのではなく、与えられたいずれか1000を超えない正の整数nに対して、簡単に数えて、どのくらいのステップ(何回切る)がn=1を得ることができますか?入力フォーマット:各テスト入力には、正の整数nの値を与える1つのテスト例が含まれます.
出力フォーマット:nから1まで計算するステップ数を出力します.
とても簡単な問題で、再帰的に循環することができて、私は再帰を使っています.
コード#コード#
#include
using namespace std;
int callatz(int n,int step){
	if(n==1){
		return step;
	}
	else if(n%2==0){
		return callatz(n/2,++step);//     ++step    step++
	}
	else{
		return callatz((3*n+1)/2,++step);
    }
}
int main(){
	int n;
	while(cin>>n)
	{cout<