递归练习题

根据下面递归函数:调用函数Fun(2),返回值是多少( )

int Fun(int n)
{
    if (n == 5)
        return 2;
    else
        return 2 * Fun(n + 1);
}
int main()
{
    int n = 2;
    int ret = Fun(n);
    printf("%d\n", ret);
    return 0;
}

作业内容:
A.2
B.4
C.8
D.16

思路图解

递归条件达成了,在一层层返回
递归练习题_第1张图片
答案:D . 16

作业标题

字符串逆序(递归实现)
作业内容
编写一个函数(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数

比如:

char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba

答案:
strlen函数可以自己写一个,这里我懒,就没写了

void reverse(char* str, int left, int right)
{
	char  tmp = str[left];
	str[left] = str[right];
	str[right] = tmp;
	if (left < right)
	{
		reverse(str, left + 1, right - 1);
	}
}
int main()
{
	char arr[] = "abcdefg";
	int left = 0;
	int right = strlen(arr) - 1;
	reverse(arr, left, right);
	printf("%s\n", arr);
	return 0;
}

计算一个数的每位之和(递归实现)

作业内容
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

输入:1729,输出:19
答案:

int DigitSum(int n)
{
	if (n > 9)
		return DigitSum(n / 10) + n % 10;
	else
		return n;
}
int main()
{
	int n = 1729;
	int ret = DigitSum(n);
	printf("%d\n", ret);
	return 0;
}

递归实现n的k次方

作业内容
编写一个函数实现n的k次方,使用递归实现。

double pow(int n, int k)
{
	if (k > 0)
		return n * pow(n, k - 1);
	else if (k == 0)
		return 1;
	else
		return 1.0 * pow(n, -k);
}
int main()
{
	int n = 2;
	int k = 3;
	double ret = pow(n, k);
	printf("%lf\n", ret);
}

你可能感兴趣的