函数的递归调用

这篇文章包含一系列使用递归函数的C语言程序,分别用于计算x的n次方、求小于等于n的所有正整数之和、数组元素的总和、数组元素的最大值、反向打印整数和字符序列,以及生成Fibonacci数列的前N项。这些程序展示了递归在解决数学问题和处理数据结构时的应用。
摘要由CSDN通过智能技术生成

第1关:编写递归函数方法求x的n次方 (要求n>=0)

#include <stdio.h>
double power(double x,int n)
{
    /********** Begin **********/  
    if(n==0)
    return 1;
    else if(n<0)
    {
        printf("n<0,data error!");
    }
    else if(n==1)
    {
        return x;
    }
    else
    {
        return x*power(x,n-1);
    }
   

    /********** End **********/
}

int main( )
{ 
    int n; 
    double  x, y;
    scanf("%lf,%d",&x,&n);
    y = power(x,n);
    if(y!=0)
    {
        printf("%lf\n",y);
    }
    return 0;
}

第2关:编写递归函数求小于等于n的所有正整数之和

#include <iostream>
using namespace std;
int add(int n);
int main()
{
    int n;
    int b;
    cin>>n;
    b = add(n);
    cout<<b<<endl;
    return 0;
}
int add(int n)
{
/********** Begin **********/ 
    if(n>1)
    return n+add(n-1);
    else if(n==1)
    return 1;

/********** End **********/
}

第3关:编写递归函数求数组元素的和

#include <stdio.h>
#define N 20
int Fun(int a[],int start,int end);
int main()
{
    int a[N], sum;
    int i,n,s,e;
    //printf("输入整数个数:");
    scanf("%d",&n);  
    //printf("输入%d个整数:\n",n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    //printf("输入起始位数:");
    scanf("%d",&s);
    //printf("输入终止位数:");
    scanf("%d",&e);
    sum = Fun(a,s,e) ;
    printf("%d\n",sum);
    return 0;
}
/**********定义Fun()函数**********/ 
/********** Begin **********/ 
int Fun(int a[],int start,int end)
{
    if(start==end)
    {
        return a[end];
    }
    else
    {
        return a[end]+Fun(a,start,end-1);
    }



}

/********** End **********/

第4关:编写递归函数求数组元素的最大值

#include <stdio.h>
#define N 20 
int max(int a,int b);
int Func(int a[],int s,int e);
int main()
{
    int a[N], m;
    int i,n,s,e;
    //printf("输入整数个数:");
    scanf("%d",&n);  
    //printf("输入%d个整数:\n",n);
    for(i=0;i<n;i++)
     {
         scanf("%d",&a[i]);
     }
    m = Func(a,0,n-1) ;
   printf("%d\n",m);
   return 0;
}
/**********定义Max()函数**********/ 
int max(int a,int b)
{
    /********** Begin **********/ 
    if(a>b)
    return a;
    else{
        return b;
    }


    /********** End **********/
}
/**********定义Func()函数**********/ 
int Func(int a[],int s,int e)
{
    /********** Begin **********/ 
    if(s==e)
    return a[e];
    else
    return max(a[s],Func(a,s+1,e));


    /********** End **********/
}

第5关:编写递归函数将所输入的整数以相反顺序打印出来

#include <stdio.h>
void reverse();             //reverse函数的声明    
int  main()
{   
    
    reverse();
    printf("\n");
    return 0;
}
/**********定义reverse ()函数**********/ 
void reverse()
{
    /********** Begin **********/ 
    int n;
    scanf("%d",&n);
    if(n==0)
    return;
    reverse();
    printf("%d ",n);




    /********** End **********/
}   

第6关:编写递归函数将所输入的5个字符,以相反顺序打印出来

#include <stdio.h>
void func(int n);
int  main()
{
    //printf("please input 5 numbers:");
    func(5);
    return 0;
}
/**********定义func ()函数**********/ 
void func(int n)
{
    /********** Begin **********/ 
    char c;
    if(n==0)
    return;
    c=getchar();
    func(n-1);
    putchar(c);

    /********** End **********/
}

第7关:编写程序输入整数N,打印Fibonacci数列的前N项

#include <stdio.h>
int F(int n) ;           
int main()
{
    int n,y,i;
    scanf("%d",&n);
    for(i=0;i<=n;i++)
    {
    y= F(i) ;
    printf("%d ",y);
    }
    printf("\n");
    return 0;
}
/**********定义F()函数**********/ 
int F(int n) 
{
    /********** Begin **********/ 
    if(n==0||n==1)
    return 1;
    else 
    return F(n-1)+F(n-2);



    /********** End **********/
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ଲଇଉକ ଲ ̊ଳ

多谢大哥赏赐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值