你的程序這樣改
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)專業(yè)提供做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站制作(企業(yè)站、自適應(yīng)網(wǎng)站建設(shè)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!
#include "stdio.h"
int F(int a)
{
if (a==1) return 1;
if (a%2) return 1+F(3*a+1);
else return 1+F(a/2);
}
void main()
{
int a=0;
scanf("%d",a);
printf("%d",F(a));
}
有的數(shù)字遞歸次數(shù)很長導(dǎo)致堆棧溢出
我是這樣算的,可以一次算出1~n的循環(huán)步數(shù)
有到ProjectEuler題目就是這個(gè)
#includeiostream
#includemath.h
using namespace std;
#define N 100
int a[N+1]={0};
int f(int n);
void main()
{
int i=1;
a[1]=1;
for(i=1;i=N;i++)
a[i]=f(i);
for(i=1;i=N;i++)
couti" "a[i]endl;
}
int f(int n)
{
if(n=Na[n])
return a[n];
else
{
if(n%2)
return 1+f(n*3+1);
else
return 1+f(n/2);
}
}
代碼比較簡單,各語句意義見注釋。。。
#include?stdio.h
int?main(int?argc,?char?*argv[])
{
int?i;?/*定義要處理的變量*/
scanf("%d",?i);?/*輸入變量值*/
while(i?!=?1)
{
if(i%2)/*奇數(shù)*/
{
printf("%d*3+1=%d\n",?i,?i*3+1);?/*按題目要求的格式打印出來*/
i?=?i*3+1;?/*更新變量值*/
}
else?/*偶數(shù)*/
{
printf("%d/2=%d\n",?i,?i/2);?/*按題目要求的格式打印出來*/
i?=?i/2;?/*更新變量值*/
}
}
printf("END\n");?/*最后打印END*/
return?0;
}
另外幾個(gè)測試結(jié)果圖片:
#includestdio.h
main()
{int
a,b,count;
printf("請(qǐng)輸入a的值,以便檢驗(yàn)角谷猜想。\na=");
scanf("%d",a);
b=a;
while
(a!=1)
{if
(a1a%2==0)
{a=a/2
;printf
("→%d\n",a);}
else
{a=3*a+1;printf("→%d\n",a);}
count++;}printf("%d需經(jīng)過%d步才得到1.",b,count);}
//如果能夠逆推出,比方說,23的下一步是70,那么都有哪些數(shù)的下一步是70?如此逆推,就能寫成一棵"數(shù)論樹".
#includestdio.h
int main()
{
int n, t, m = 0;
scanf("%d", n);
t = n;
printf("%d ", t);
while(t != 1)
{
if(t % 2)
t = t * 3 + 1;
else
t /= 2;
m++;
printf("%d ", t);
}
printf("\n%d calculate %d times,the answer become to 1!\n", n, m);
return 0;
}
#includestdio.h
main()
{
int n,c=0;
printf("輸入一個(gè)小于等于一萬的整數(shù):");
scanf("%d",n);
if(n10000n0) printf("輸入錯(cuò)誤請(qǐng)重新輸入!");
while(n!=1)
{
if(n%2==0)
n=n/2;
else
n=n*3+1;
c++;
}
printf("%d\n",c);
}