递归函数

对于递归,递归函数直接或者间接地调用自身,函数每一次调用必须进一步的靠近目标,当达到目标时,递归函数就不再调用自身了。阅读递归函数,只要简单的认为递归函数将会执行它的预定任务即可。
尾递归:如果递归调用是函数所执行的最后一项任务,我们把它叫做尾递归。
对于尾递归,我们可以很方便地转换成一个简单循环,完成相同的任务,这就是我们所说的迭代。
如:阶乘和斐波那契数列的问题,用迭代来解决问题,效率就会更高一些。

//编写一个函数实现n^k,使用递归实现
#include<stdio.h>
#include<stdlib.h>

int my_pow(int n, int k)
{
    if (k)
    {
        k--;

        return n*my_pow(n, k);
    }
    else
        return 1;
}
int main()
{
    int n = 0;
    int k = 0;
    int ret = 0;
    printf("请输入底数:");
    scanf("%d", &n);
    printf("请输入指数:");
    scanf("%d", &k);
    ret=my_pow(n,k);
    printf("输出结果=%d", ret);
    system("pause");
    return 0;
}
//写一个递归函数DigitSum(n),输入一个非负整数,返回
//组成它的数字之和,例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
#include<stdio.h>
#include<stdlib.h>
int DigitSum(int n)
{

    if (n)
    {
        return n % 10 + DigitSum(n / 10);
    }
    return 0;
}

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

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

#include<stdio.h>
#include<stdlib.h>
char *reverse_string(char * str ,int sz)
{
    if (sz>1)
    {
        char tmp = *str;
        *str = *(str + sz - 1);
        *(str + sz - 1) = '\0';
        reverse_string(str+1, sz-2);
        *(str + sz - 1) = tmp;
    }

    return str;
}

int main()
{
    char str[] = "abcdef";
    int sz = (sizeof(str) / sizeof(str[0]))-1;
    reverse_string(str,sz);
    printf("%s", str);
    system("pause");
}

你可能感兴趣的:(递归函数)