zoukankan      html  css  js  c++  java
  • Work_7

    递归和非递归分别实现求第n个斐波那契数。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    //非递归
    int Fib1(int input){
        if (input == 1 || input == 2){
            return 1;
        }
        int first = 1;
        int second = 1;
        int number = 0;
        for (int i = 3; i <= input; i++){
            number = first + second;
            first = second;
            second = number;
        }
        return number;
    }
    
    //递归
    int Fib2(int input){
        if (input == 1 || input == 2){
            return 1;
        }
        return Fib2(input - 1) + Fib2(input - 2);
    
    }
    int main(){ int input; printf("请输入所求的为第几个斐波那契数:"); scanf("%d", &input);
    //非递归 printf("%d(非递归) ", Fib1(input));
    //递归 printf("%d(递归)", Fib2(input));
    printf(
    " "); system("pause"); return 0; }

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

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    int Pow(int n, int k){
        if (k == 1){
            return n;
        }
        return n * Pow(n, k - 1);
    }
    
    int main(){
        int n, k;
        printf("请输入计算式(n ^ k)中的n与k的值:
    ");
        scanf("%d %d", &n, &k);
        printf("%d",Pow(n, k));
        printf("
    ");
        system("pause");
        return 0;
    }

     写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
    例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    int DigitSum(int input){
        if (input < 9){
            return input;
        }
        return input % 10 + DigitSum(input / 10);
    }
    
    int main(){
        int input;
        printf("请输入一个非负整数:
    ");
        scanf("%d", &input);
        while (input < 0){
            printf("输入格式错误,请重新输入:
    ");
            scanf("%d", &input);
        }
        printf("%d", DigitSum(input));
        printf("
    ");
        system("pause");
        return 0;
    }

    编写一个函数 reverse_string(char * string)(递归实现)
    实现:将参数字符串中的字符反向排列。
    要求:不能使用C函数库中的字符串操作函数。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    void  Reverse_string(char* string){
        if (*string == ''){
            return;
        }
        Reverse_string(string + 1);
        printf("%c", *string);
    }
    
    int main(){
        char input[100];
        printf("请输入少于100的字符串:
    ");
        scanf("%s", input);
        Reverse_string(input);
        printf("
    ");
        system("pause");
        return 0;
    }

    递归和非递归分别实现strlen。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    //非递归
    int Strlen1(char* str){
        int count = 0;
    
        //法一
        while (*str != ''){
            count++;
            str = str + 1;
        }
    
        ////法二
        ////str[count] => *(str +count)
        //while (str[count] != ''){
        //    count++;
        //}
    
        return count;
    }
    
    //递归
    int Strlen2(char* str){
        if (*str == ''){
            return 0;
        }
        return 1 + Strlen2(str + 1);
    }
    
    int main(){
        char input[100];
        printf("请输入少于100的字符串:
    ");
        scanf("%s", input);
    
        //非递归
        printf("%d(非递归)
    ", Strlen1(input));
    
        //递归
        printf("%d(递归)", Strlen2(input));
    
        printf("
    ");
        system("pause");
        return 0;
    }

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

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    //非递归
    int Fac1(int input){
        int sum = 1;
        for (int i = input; i > 0; i--){
            sum = sum * i;
        }
        return sum;
    }
    
    //递归
    int Fac2(int input){
        if (input == 1){
            return input;
        }
        return input * Fac2(input - 1);
    }
    
    int main(){
        int input;
        printf("请输入n的阶乘中的n:
    ");
        scanf("%d", &input);
    
        //非递归
        printf("%d(非递归)
    ", Fac1(input));
    
        //递归
        printf("%d(递归)", Fac2(input));
    
        printf("
    ");
        system("pause");
        return 0;
    }

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

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    void Number(int input){
        //按个、十、百……打印
        printf("%d ", input % 10);
        if (input > 9){
            Number(input / 10);
        }
        return;
    
        ////按百、十、个……打印
        //if (input < 9){
        //    printf("%d ", input);
        //    return;
        //}
        //Number(input / 10);
        //printf("%d ", input % 10);
    }
    
    int main(){
        int input;
        printf("请输入一个整数:
    ");
        scanf("%d", &input);
        Number(input);
        printf("
    ");
        system("pause");
        return 0;
    }
  • 相关阅读:
    写给自己:青年员工交流会会议记录
    写给自己:金融小白的考证之路
    写给自己:入职初体验
    反欺诈体系
    政策&定价&风控审批策略
    你还在寻找Navicat的破解版本?你应该了解开源免费的DBeaver
    规则引擎在IoT的重要性?
    轻松上手SpringBoot Security + JWT Hello World示例
    Kafka 系列-1
    JDK14-ZGC调研初探
  • 原文地址:https://www.cnblogs.com/lkimprove/p/10156547.html
Copyright © 2011-2022 走看看