递归(函数的实现)

strlen函数的实现##1.递归和非递归分别实现求第n个斐波那契数。

非递归
#include 

void fib(int n)
{
    int tt = n;
    int p1 = 1;
    int p2 = 1;
    int p3 = 1;
    while(tt>2)
    {
        p3 = p1 + p2;
        p1 = p2;
        p2 = p3;
        tt--;
    }  
    printf("第%d个斐波那契数为:%d\n",n,p3);
}

int main()
{
    int n = 0;
    while(1)
    {
    printf("请输入一个大于零的整数:");
    scanf("%d",&n);
    fib(n);
    }
    return 0;
}
递归的方法
#include 

int fib(int n)
{
    if(n>2)
      return fib(n-1)+fib(n-2);
    else 
        return 1;
}
int main()
{
    int n = 0;
    printf("请输入一个大于零的整数:");
    scanf("%d",&n);
    printf("%d\n",fib(n));
    return 0;
}

2.编写一个函数实现n^k,使用递归实现

#include 

double mi(double n,double k)
{
    if(k>1)
        return n*mi(n,k-1);
    else return n;
}

int main()
{
    double n = 0;
    double k = 0;
    printf("请输入n和k的值 格式“n k”\n");
    scanf("%lf%lf",&n,&k);
    printf("%lf\n",mi(n,k));
    return 0;
}

3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

#include 

int DigitSum(int x)
{
    if(x >= 10)
        return (x%10)+DigitSum(x/10);
    return x%10;
}

int main()
{
    int x = 0;
    printf("请输入一个非负整数:");
    scanf("%d",&x);
    printf("%d\n",DigitSum(x));
    return 0;
}

4. 编写一个函数reverse_string(char * string)(递归实现)

实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中
的字符串操作函数。

#include 

void reverse_string(const char * string)
{
    if(*string != '\0')
    {
        string++;
        reverse_string(string);
        printf("%c",*(string-1));
    }   
}
int main()
{
    char *p = "abcdef";
    printf("原字符串为%s 反向排列为:",p);
    reverse_string(p);
    printf("\n");
    return 0;
}

5.递归和非递归分别实现strlen

非递归

#include 

int my_strlen(const char *p)
{
    char *q = p;
    while(*q)
        q++;
    return q-p;
}
int main()
{
    char *p = "abcdef";
    printf("%d\n",my_strlen(p));
    return 0;
}

递归

#include 

int my_strlen(const char *p)
{
    if(*p != '\0')
        return 1+my_strlen(p+1);
    return 0;
}
int main()
{
    char *p = "abcdef";
    printf("%d\n",my_strlen(p));
    return 0;
}

6.递归和非递归分别实现求n的阶乘

非递归
#include 

int  factorial(int n)
{
    int sum = 1;
    while(n)
    {
        sum = sum*n;
        n--;
    }
    return sum;
}

int main()
{
    int n = 0;
    printf("请输入一个数:");
    scanf("%d",&n);
    printf("%d\n",factorial(n));
    return 0;
}
递归
#include 

int factorial(int n)
{
    if(n>1)
        return n*factorial(n-1);
    return 1;
}
int main()
{
    int n = 0;
    printf("请输入一个数:");
    scanf("%d",&n);
    printf("%d\n",factorial(n));
    return 0;
}

7.递归方式实现打印一个整数的每一位

#include 

void print(int x)
{
    if(x>=10)
        print(x/10);
     printf("%d ",x%10);
}

int main()
{
    int x = 0;
    printf("请输入一个数:");
    scanf("%d",&x);
    print(x);
    return 0;
}

你可能感兴趣的:(c语言)