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(非递归)\n", Fib1(input));
//递归 printf("%d(递归)", Fib2(input));
printf(
"\n"); 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的值:\n");
    scanf("%d %d", &n, &k);
    printf("%d",Pow(n, k));
    printf("\n");
    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("请输入一个非负整数:\n");
    scanf("%d", &input);
    while (input < 0){
        printf("输入格式错误,请重新输入:\n");
        scanf("%d", &input);
    }
    printf("%d", DigitSum(input));
    printf("\n");
    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 == '\0'){
        return;
    }
    Reverse_string(string + 1);
    printf("%c", *string);
}

int main(){
    char input[100];
    printf("请输入少于100的字符串:\n");
    scanf("%s", input);
    Reverse_string(input);
    printf("\n");
    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 != '\0'){
        count++;
        str = str + 1;
    }

    ////法二
    ////str[count] => *(str +count)
    //while (str[count] != '\0'){
    //    count++;
    //}

    return count;
}

//递归
int Strlen2(char* str){
    if (*str == '\0'){
        return 0;
    }
    return 1 + Strlen2(str + 1);
}

int main(){
    char input[100];
    printf("请输入少于100的字符串:\n");
    scanf("%s", input);

    //非递归
    printf("%d(非递归)\n", Strlen1(input));

    //递归
    printf("%d(递归)", Strlen2(input));

    printf("\n");
    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:\n");
    scanf("%d", &input);

    //非递归
    printf("%d(非递归)\n", Fac1(input));

    //递归
    printf("%d(递归)", Fac2(input));

    printf("\n");
    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("请输入一个整数:\n");
    scanf("%d", &input);
    Number(input);
    printf("\n");
    system("pause");
    return 0;
}

 

posted @ 2018-12-21 16:27  lkimprove  阅读(123)  评论(0编辑  收藏  举报