#include<stdioh>
#include<stringh>
#include<stdlibh>
int fib(int g)
{ switch(g)
case 1:
case 2: return 1;
return -1;
}
int main()
{
printf("%d\n", fib(5));
system("pause");
return 0;
}
这样的话很明显是-1,因为你传入5,不属于switch当中的0或1,所以只会回传-1,最后印出-1
……
通常的教材上讲到递归时,引用“斐波那契数列”的例子,其实我感觉这是一个误导。“斐波那契数列”的递归解决是效率最低的。
递归版
//打印斐波那契数列的前10项
#include <stdioh>
#define MAX 10
int fib(int n);
int main(){
int i;
printf("斐波那契数列的前10项是:\n");
for(i=1;i<=MAX;i++){
printf("%d\t",fib(i));
}
return 0;
}
int fib(int n){
return n<31:(fib(n-1)+fib(n-2));
}
迭代版
//打印斐波那契数列的前10项
#include <stdioh>
#define MAX 9
int main(){
int fib[MAX],i=2;
fib[0]=fib[1]=1;
printf("斐波那契数列的前10项是:\n%d\t%d\t",fib[0],fib[1]);
while(i<10){
fib[i]=fib[i-1]+fib[i-2];
printf("%d\t",fib[i]);
i++;
}
return 0;
}
你的程序写错了,return(fib(n-1)+fib(n-2)忘记了一个),改为return(fib(n-1)+fib(n-2)),程序就没错误了。
程序的运行结果为:16
代码解释如下:
fib()函数是个递归函数,实现如下功能:当参数n>2时,将n赋值为n-1,和n-2返回,直到n<=2停止,像主函数里面的fib(6),先返回fib(5)+fib(4);然后继续执行fib()函数,fib(4)+fib(3)+fib(3)+2;然后继续执行fib()函数返回fib(3)+2+2+2+2+2+2,然后继续执行fib()函数返回:{2+2+2}+2+2+2+2+2,然后结束将结果输出。
#include<stdioh>
main()
{
int fib[20]={1,1};
int i;
for(i=2;i<20;i++)
//
fib[i]=fib[i-1]+fib[i-2];//改括号
for(i=0;i<20;i++)
//
printf("%6d",fib[i]);//加双引号
printf("\n");
}
以上就是关于读程序写出程序执行结果 #include <stdio.h> int fib(int g) { switch(g) case 1: case 2: return 1; } ret全部的内容,包括:读程序写出程序执行结果 #include <stdio.h> int fib(int g) { switch(g) case 1: case 2: return 1; } ret、编写一个C程序,用于打印斐波那契数列的前10个数、有以下C语言程序,程序的输出结果是什么请写出详细的执行过程。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)