1.实现求第n个斐波那契数2.编写一个函数实现n^k3. 输入一个非负整数,返回组成它的数字之和4. 将参数字符串中的字符反向排列5.实现strlen 6.求n的阶乘7.打印一个整数的每一位

#include<stdio.h>
#include<windows.h>
//1.递归实现求第n个斐波那契数。
int fib1(int n)
{
    if (n > 2)
        return (fib1(n-1) + fib1(n - 2));
    else
        return 1;
}
//非递归实现求第n个斐波那契数。
int fib2(int n)
{
    int prior_result = 1;
    int result = 1;
    int next_result;
    while (n > 2)
    {
        n--;
        next_result = prior_result;
        prior_result = result;
        result = prior_result + next_result;
    }
    return result;
}
//2.编写一个函数实现n^k,使用递归实现
int index(int n,int k)
{
    
    if (k ==0)
    {
        return 1;
    }
    else if (k == 1)
    {
        return n;
    }
    else 
    {
        return n * index(n, k-1);
    }
}
//3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和.
int DigitSum(int n)
{
        if (n < 10)
        {
            return n;
        }
        else
        {
            return (n % 10) + DigitSum(n / 10);
        }
}
//4. 编写一个函数实现:将参数字符串中的字符反向排列。
void  reverse_string(char * string)
{
    if (*(++string) != '\0')
        reverse_string(string );
    printf("%c", *(string-1));

}
//5.递归实现strlen
int strlen1(char *string)
{
    if (*string == '\0')
    {
        return 0;
    }    
    else
    {
        return 1 + strlen1(++string);
    }
}
//5.非递归实现strlen 
int strlen2(char *string)
{
    int i = 0;
    while (*string != '\0')
    {
        ++string;
        ++i;
    }
    return i;
}
//6.递归和非递归分别实现求n的阶乘
int Factorial1(int n)
{
    if (n <=1)
        return 1;
    else
        return n * Factorial1(n - 1);
}
int Factorial2(int n)
{
    int result = 1;
    while (n > 1)
    {
        result *= n;
        n -= 1;
    }
    return result;

}
//7.递归方式实现打印一个整数的每一位
void print(int n)
{
    if (n > 9)
    {
        print(n / 10);
    }
    printf("%d ", n%10);
}

int main()
{//1.递归和非递归分别实现求第a个斐波那契数。
     printf("输出要求的第a个斐波那契数");
    int a;
    int result;
    scanf("%d", &a);
    result=fib1(a);
    printf("结果为:%d\n", result);
    result=fib2(a);
    printf("结果为:%d\n", result);
    //2.编写一个函数实现n^k,使用递归实现
    int n;
    int k;
    printf("输入n和k求n^k\n");
    scanf("%d", &n);
    scanf("%d", &k);
    result = index(n, k);
    printf("结果为:%d\n",result);
    //3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和.
    int number;
    printf("请输入一个数字求组成他的数字之和");
    scanf("%d", &number);
    printf("结果为: %d\n", DigitSum(number));
    //4. 编写一个函数实现:将参数字符串中的字符反向排列。
    char string []= "abcd";
    reverse_string(string);
    //5.递归和非递归分别实现strlen 
    char string1[] = "abcd";
    printf("abcd字符长度为:%d\n", strlen1(string1));
    printf("abcd字符长度为:%d\n", strlen2(string1));
    //6.递归和非递归分别实现求n的阶乘
    int number_1;
    printf("请输入数字n求他的阶乘");
    scanf("%d", &number_1);
    printf("n的阶乘为:%d\n", Factorial1(number_1));
    printf("n的阶乘为:%d\n", Factorial2(number_1));
    //7.递归方式实现打印一个整数的每一位
    int num ;
    printf("请输入一个整数,输出他的每一位:");
    scanf("%d", &num);
    printf("结果为:");
    print(num);
    system("pause");

}

发布了35 篇原创文章 · 获赞 7 · 访问量 3200

猜你喜欢

转载自blog.csdn.net/weixin_44358097/article/details/90183455