C语言:采用递归调用函数方法计算Fibonacci数列的前20项
#include
long int F(int n)
{
if (n==1||!n) {
return n;
}
else return F(n-1)+F(n-2);
}
int main(void)
{
int i,n;
printf("n=");
scanf("%d",&n);
for (i=0; i<n; i++) {
printf("%-10ld",F(i));
}
return 0;
}
在数理逻辑和计算机科学中
递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是"可计算的" 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是阿克曼函数。
以上内容参考:百度百科-递归函数
#include
long func(long n)
{
if(n==0||n==1)return n;
else return func(n-1)+func(n-2);
}
main()
{
long n;
printf("please input n:");
scanf("%ld",&n);
printf("the result is %ld",func(n));
}
#include<iostream.h>
#include<iomanip.h>
long fibonacci(long,int);
void main(void)
{
int n;
cout<<"please input\"n\"";
cin>>n;
cout<<endl;
if(fibonacci(n,1)==-1)cout<<"error message:n<0";
}
long fibonacci(long number,int out)
{
if(number<0)
return-1;//return error message
else if(number==0)
return 0;
else if(number==1)
{
if(out)
cout<<number<<setw(5);
return 1;
}
else
{
long lVal;
if(out)
lVal=fibonacci(number-2,0)+fibonacci(number-1,1);
else
lVal=fibonacci(number-2,0)+fibonacci(number-1,0);
if(out)
cout<<lVal<<setw(5);
return lVal;
}
}
扩展资料:
斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,
像这样的:1、1、2、3、5、8、13、21、34、55......
今天,用四种方式来进行实现:
1.递归
int Fibon1(int n)
{
if(n==1||n==2)
{
return 1;
}
else
{
return Fibon1(n-1)+Fibon1(n-2);
}
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
ret=Fibon1(n);
printf("ret=%d",ret);
return 0;
}
2.非递归
int Fibno2(int n)
{
int num1=1;
int num2=1;
int tmp=0;
int i=0;
if(n<3)
{
return 1;
}
else
{
for(i=0;i>n-3;i++)
{
tmp=num1+num2;
num1=num2;
num2=tmp;
}
return tmp;
}
}
3.数组
public int Fibno3(int n)
{
List<int>list=new List<int>();
list.fib(1);
list.fib(1);
int count=list.Count;
while(count<n)
{
list.fib(list[count-2]+list[count-1]);
count=list.Count;
}
return list[count-1];
}
4.队列
public int Fibno4(int n)
{
Queue<int>queue=new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(1);
for(int i=0;i<=n-2;i++)
{
queue.Enqueue(queue.AsQueryable().First()+queue.AsQueryable().Last());
queue.Dequeue();
}
return queue.Peek();
}
参考资料:
百度百科——斐波那契数列
使用递归进行操作时,关键是设置好递归条件。斐波那契数列的定义如下:
f2 = f0 + f1 = 0 + 1 = 1,所以条件可以设置成当n==1或者n==2时,返回1。其它项则依次递归调用即可。
#include <stdio.h>
int f(int n){
if(n==1 || n==2)
return 1;
else
return (f(n-2)+f(n-1));
}
int main(){
const int num = 20;
int i;
for(i=1;i<=num;i++){
printf("%-6d",f(i));
if(i%5==0)
printf("
");
}
printf("
");
return 0;
}
#include <stdio.h>
#define N 20
main(){
int f(int n);
int i;
for(i=1;i<=N;i++){
printf("%-6d",f(i));
if(i%5==0)
printf("\n");
}
printf("\n");
}
int f(int n){
if(n==1 || n==2)
return 1;
else
return (f(n-2)+f(n-1));
}
long fibonacci(int n)
{ long t;
if (n=2)
{ t=1;
return t;
}
if (n=1)
{ t=1;
return t;
}
t=fibonacci(n-1)+fibonacci(n-2);
return t;
}
1、没有调试;
2、主 函数 自己 写;
#include <stdio.h>
#define N 20
main(){
int f(int n);
int i;
for(i=1;i<=N;i++){
printf("%-6d",f(i));
if(i%5==0)
printf("\n");
}
printf("\n");
}
int f(int n){
if(n==1 || n==2)
return 1;
else
return (f(n-2)+f(n-1));
}
c语言函数递归(实现原理与应用场景)
答:1.函数调用自身,将问题分解成更小的子问题。2.子问题可以通过调用函数本身来解决。3.当子问题足够简单时,可以直接解决,不需要再次调用函数本身。4.将子问题的解合并成原问题的解。递归函数的实现原理可以用一个经典的例子来解释:阶乘函数。阶乘是指将一个整数n乘以n-1乘以n-2乘以...1,即n!。
c语言怎么用递归调用函数的方法求n的阶乘?
答:1、打开VC6.0软件,新建一个C语言的项目:2、接下来编写主程序,首先定义用来求阶乘的递归函数以及主函数。在main函数里定义变量sum求和,调用递归函数fact(),并将返回值赋予sum,最后使用printf打印sum的结果,主程序就编写完了:3、最后运行程序,观察输出的结果。以上就是C语言使用递归求阶乘的写法:...
编写程序 用C语言。。用递归法并用函数调用方式将整型数组a中的前k...
答:void main(){ void reverse(int *ptr, int left, int right);void swap(int *ptr, int a, int b);int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int k = 0;int left = 0, right = 9;printf("请输入需要逆置的个数:\n");scanf("%d", &k);right = k - 1;...
在C语言中用递归调用的方法求n!
答:-》5*(4*(3*(2*Func(1)))当n为0的时候停止递归,返回结果 由于遇到1的时候返回1,那么Func(1)=1 所以结果是5*(4*(3*(2*1))) = 120
c语言 函数递归调用的简单例子
答:举一个用递归调用函数求输入非负整数的阶乘的例子,如下://#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"int fact(int n){ if(n==1 || n==0) return 1; else return n*fact(n-1);}int main(void){ int x; while(1){ printf("I...
c语言:采用递归方法实现将输入的字符串按反序输出
答:以下是使用递归方法实现将输入字符串按反序输出的 C 语言程序:```c include <stdio.h> // 递归函数,将字符串 str 按反序输出 void printReverse(char *str) { if (*str == '\0') { // 判断是否到达字符串结尾 return;} else { printReverse(str + 1); // 递归调用,输出下一...
C语言编程:用函数递归法求Fibonacci数列的前n项·
答:long int F(int n){ if (n==1||!n) { return n;} else return F(n-1)+F(n-2);} int main(void){ int i,n;printf("n=");scanf("%d",&n);for (i=0; i<n; i++) { printf("%-10ld",F(i));} return 0;} 在数理逻辑和计算机科学中 递归函数或μ-递归函数是一类...
C语言函数的递归调用
答:先调用函数f,然后把返回值赋值给z。不过这个函数不对,没有退出条件,无法停止。举例说明吧 int f(int x){ if(x==0){ return 1;} else { return x*f(x-1);} } 假如f(3)那么 第一次f(3):x!=0,调用f(2)第二次f(2):x!=0,调用f(1)第三次f(1):x!=0,调用f(0...
c语言函数的递归调用
答:这段程序的意思是对传来的参数n,如果n<1,程序会崩溃;如果n>1则没大1,返回就多2,最后必然会执行c=10。比如n=5,则返回的是18((5-1)x2+10=18)比如说做了5次递归,即n=5;执行的操作如下:第1次调用(n=5) ,定义了一个intc;第2次调用(n=4) ,定义了一个intc;第3次调用...
C语言编写: 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出 ...
答:include<conio.h> include<stdio.h> void reverse(int i){ char c;if(i>0){c=getch();reverse(i-1);printf(" %c ",c);} } main(){ reverse(5);}