函数递归练习

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//1.字符串逆序(不用C语言库函数)

int my_strlen(char* p)      //求字符串长度函数
{
    int count = 0;
    while (*p != '\0')
    {
        count++;
        p++;
    }
    return count;
}

//非递归解法
void Reverse(char* p)     //字符逆序打印函数
{
    int left = 0;
    int right = my_strlen(p) - 1;
    while (left < right)
    {
        char tmp = *(p + left);
        *(p + left) = *(p + right);
        *(p + right) = tmp;
        left++;
        right--;
    }
}

//递归解法
void Reverse(char* p)
{
    char tmp = *p;                 //①
    int len = my_strlen(p);
    *p = *(p + len - 1);           //②
    *(p +len - 1) = '\0';          //③
    if (my_strlen(p + 1) >= 2)
    {
        Reverse(p + 1);            //④
    }
    *(p + len - 1) = tmp;          //⑤

}

int main()
{
    char str[] = "abcdef";
    Reverse(str);
    printf("%s", str);
    return 0;
}


//2.给一个数字,求出每位数字相加之和
int perSum(int n)
{
    if (n > 9)
    {
        return perSum(n / 10) + n % 10;
    }
    else
        return n;
}
int main()
{
    int n = 2023;
    printf("%d \n", perSum(n));
    return 0;
}
 
 
//3.编写一个函数,递归实现n的k次方

double Pow(int n, int k)          //求n的k次方函数
{
    if (k == 0)
    {
        return 1.0;
    }
    else if (k > 0)
    {
        return n * Pow(n,k-1);
    }
    else
    {
        return (1.0) / Pow(n, (-k));
    }
}

int main()
{
    int n,k;
    scanf("%d %d", &n, &k);
    double ret = Pow(n, k);
    printf("%lf\n", ret);
    return 0;
}
好的,以下是一些 C++ 中的递归函数练习题: 1. 编写一个递归函数,计算 n 的阶乘 ```cpp int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } ``` 2. 编写一个递归函数,计算斐波那契数列的第 n 项 ```cpp int fibonacci(int n) { if (n == 0 || n == 1) { return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } ``` 3. 编写一个递归函数,计算一个数字的二进制表示中 1 的个数 ```cpp int countOnes(int n) { if (n == 0) { return 0; } else { return (n % 2 == 1) + countOnes(n / 2); } } ``` 4. 编写一个递归函数,计算一个数字的反转 ```cpp int reverse(int n) { if (n < 10) { return n; } else { return (n % 10) * pow(10, floor(log10(n))) + reverse(n / 10); } } ``` 5. 编写一个递归函数,计算一个字符串的长度 ```cpp int stringLength(string str) { if (str == "") { return 0; } else { return 1 + stringLength(str.substr(1)); } } ``` 6. 编写一个递归函数,判断一个字符串是否是回文字符串 ```cpp bool isPalindrome(string str) { if (str.length() <= 1) { return true; } else if (str[0] != str[str.length() - 1]) { return false; } else { return isPalindrome(str.substr(1, str.length() - 2)); } } ``` 7. 编写一个递归函数,计算一个数组中所有元素的和 ```cpp int arraySum(int arr[], int size) { if (size == 0) { return 0; } else { return arr[0] + arraySum(arr + 1, size - 1); } } ``` 8. 编写一个递归函数,计算一个数组中所有元素的平均值 ```cpp double arrayAverage(int arr[], int size) { if (size == 0) { return 0; } else { return (arr[0] + (size - 1) * arrayAverage(arr + 1, size - 1)) / size; } } ``` 9. 编写一个递归函数,计算一个数组中的最大值 ```cpp int arrayMax(int arr[], int size) { if (size == 1) { return arr[0]; } else { return max(arr[0], arrayMax(arr + 1, size - 1)); } } ``` 10. 编写一个递归函数,计算一个数组中的最小值 ```cpp int arrayMin(int arr[], int size) { if (size == 1) { return arr[0]; } else { return min(arr[0], arrayMin(arr + 1, size - 1)); } } ``` 希望这些练习题能够帮助你练习 C++ 中的递归函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值