我舉個(gè)例子:
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)浦城免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
①斐波那契數(shù)列:1,1,2,3,5,8,13,21,34......
迭代:int Fib[N];
Fib[0]=1;Fib[1]=1;
for(i=2;iN;i++)
Fib[i]=Fib[i-1]+Fib[i-2];
}
遞歸:int Fib(int n)
{ if(n==0||n==1)return 1;
else return (Fib(n-1)+Fib(n-2));
}
你的程序這樣改
#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ù)很長(zhǎng)導(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);
}
}
#includestdio.h
main()
{
int n,c=0;
printf("輸入一個(gè)小于等于一萬(wàn)的整數(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);
}
#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)過(guò)%d步才得到1.",b,count);}
//如果能夠逆推出,比方說(shuō),23的下一步是70,那么都有哪些數(shù)的下一步是70?如此逆推,就能寫(xiě)成一棵"數(shù)論樹(shù)".