
正文
c语言求函数的第n项 c语言求n!
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言 用递归法求斐波那契数列第n项值
斐波纳契数列(Fibonacci
Sequence)又称黄金分割数列c语言求函数的第n项,指的是这样一个数列c语言求函数的第n项:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义c语言求函数的第n项:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版c语言求函数的第n项了《斐波纳契数列》季刊,专门刊载这方面的研究成果。
用递归法计算斐波那契数列的第n项
#include stdio.h
int Fibonacci(int n)
{
if( n == 1 || n == 2) // 递归结束的条件,求前两项
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2); // 如果是求其它项,先要求出它前面两项,然后做和。
}
int main()
{
int n;
printf("please input n: ");
scanf("%d",n);
printf("Result: %d\n",Fibonacci(n));
return 0;
}
相关问答
Q1: C语言编程输出斐波那契数列第n项的值。多组,第一行输入一个n(n大于等于0小于等于10的10次方)
斐波那契数列中
F[x]=F[x-1]+F[x-2];
对于n不大c语言求函数的第n项,可以直接用递推来解决
#includestdio.h
int main(){
int n,f1,f2,f3,i;
while(~scanf("%d",n)){
f1=1,f2=1;
if(n2){
printf("1\n");
continue;
}
for(i=3;i=n;i++){
f3=(f1+f2)%66666;
f1=f2;
f2=f3;
}
printf("%d\n",f3);
}
return 0;
}
就可以c语言求函数的第n项了。
但是这道题目n比较大,是10^10
直接这么跑c语言求函数的第n项的话,时间有点接受不了
那么就要高一点手段了。。
可以写出一下两个等式c语言求函数的第n项:
F[n] =1*F[n-1]+1*F[n-2]
F[n-1]=1*F[n-1]+0*F[n-2]
这样就乐意用F[n-1] F[n-2] 表示 F[n] F[n-1]了
这么表示的意义在于,可以写成一个转移矩阵:
那么就可以递推一下:
现在c语言求函数的第n项我们只需要能快速地处理中间那个矩阵的n-2次方
就可以快速求出数列的第n项了
假如要求a的b次方(这里写成a^b):
比如a的11次方:
11表示成二进制为1011
容易知道:
所以,只需将a不断平方,在二进制那一位是1的乘到结果里就可以了
这段的C代码是这样的(为了不溢出,中间mod66666)
int quickpower(int a,int b){
int ret=1;
while(b){
if(b1)
ret=ret*a%66666;
a=a*a%66666;
b=1;
}
return ret;
}//只需要把上面的a改成矩阵就可以了
Q2: 数列0,1,1,2,3,5,8,13,21,…编程实现求第n项的值。(n的值由键盘输入)急求那位高手帮帮
我用JAVA做的 你看看吧
Fibornacci数列,第一项是0,第二项是1,其余的每一项都是前两项的和.
import java.util.*;
public class q1
{
public static void main(String args[])
{
int z;
Scanner cin=new Scanner(System.in);
int[] e=new int[1000];
e[1]=0;e[2]=1;
for(int i=3;i1000;i++)
{ e[i]=e[i-1]+e[i-2];
}
System.out.println("输入n");
z=cin.nextInt();
System.out.println("答案:"+e[z]);
}
}
Q3: C语言求 菲波拉契序列 第N项是什么的问题。
这个程序c语言求函数的第n项的意思是c语言求函数的第n项,读者从键盘上任意输入一个数N。然后通过该程序得出该数字对应的菲波拉契序列 第N项是什么。并显示到屏幕上。f1c语言求函数的第n项,f2传递数值c语言求函数的第n项,后一项数字是前两项的和c语言求函数的第n项,
先判断是数列的第几个数,当所求的数是第一第二数是直接输出,当是第三及其以后的数就是所求数位置前面的两数之和,求出f3后更新f1,f2 。int f1, f2的具体意义是第N项对应的前2项。
for (i = 3; i = n; ++i) 这个是设置循环条件,只有当输入的n大于3时才执行,一直循环到=n时结束。其中没循环一次i+1.
{
f3 = f1 + f2;这个的意思是某一项等于它的前2项之和,例如当n为3时,它就等于1+2=3
f1 = f2;把f2的值赋给f1,这样做的目的是当执行到下一个循环时,n的前的第2项
f2 = f3;
把f3的值赋给f2,这样做的目的是当执行到下一个循环时,n的前的第1项
}
举个例子,当我从键盘上输入的这个数为5时,首先通过if语句判断,显然n是大于2的,所以跳过前2个if执行for循环语句。并从i=3开始执行。当i=3时,执行f3=f1+f2=1+2=3,然后通过f1=f2,f2=f3,即循环结束后f1=2,f2=3.执行一次循环i+1,即下次循环i=4,此时,f3=f1+f2=2+3=5,然后通过f1=f2,f2=f3,即循环结束后f1=3,f2=5.执行一次循环i+1,下次循环时,i=5,f3=f1+f2=3+5=8通过f1=f2,f2=f3,即循环结束后f1=5,f2=8 执行一次循环i+1,此时i=6,由于i大于了n,所以跳出循环,即得出最后结果,并输出到屏幕上。
Q4: 关于c语言的 求快速斐波那契数列数列第n项的问题
#include stdio.h
void fun(int a)
{
long f1,f2,f;
int i;
f1=f2=1;
if(a=2)
f=1;
else
for(i=3;i=a;i++){
f=f1+f2;
f1=f2;
f2=f;
}
printf("%ld\n",f);
}
main( )
{
int n;
scanf("%d",n);
fun(n);
}
Q5: C语言 用递归法求斐波那契数列第n项值 不要复制粘贴的
#include stdio.h
int fun(int n)
{
if( n == 1 || n == 2) // 递归结束的条件,求前两项
return 1;
else
return fun(n-1)+ fun(n-2); // 如果是求其它项,先要求出它前面两项,然后做和。
}
int main()
{
int n;
printf("please input n: ");
scanf("%d",n);
printf("Result: %d\n", fun(n));
return 0;
}
哪儿不明白就继续追问
关于c语言求函数的第n项和c语言求n!的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






