C程序设计题 递归的算法题

C程序设计题 递归的算法题,第1张

#include <iostream>

using namespace std

void reverse(int *a,int n) //反转的函数:参数a是数组首地址,n是数缓指组的个数

{

int *pa=a //保存传入的数组地址

int tempn=n //保存传入的数组个数

if(n==1)//圆旦如果只剩一个数,直接打印就可以

{

cout<<*a<<" " //打印这一个数

}

else if(n==2) //如果只剩两个数,也直接倒着打印就可以

{

cout<<*(a+1)<<" " //打印第二个数

cout<<*a<<" " //打印第一个数

}

else//如果剩了超过2个数,就得再次递归计算了

{

cout<<*(a+n-1)<<" "//先打印此需要反转的数组的最橘哪扰后一个数

reverse(pa+1,n-2) //进入递归去计算去掉第一个数和最后一个数的数组的反转

cout<<*a<<" " //最后打印此需要反转的数组的第一个数

}

}

int main() //主函数

{

int a[7]={1,2,3,4,5,6,7}//一个实例数组

reverse(a,7) //调用反转函数

return 0 //正确执行完毕会返回值0给 *** 作系统

}

我已经发给你邮箱了;

main()

{ printf("%d\n", f1(4))

printf("%d\n", f2(4))//这里两个换行

f3(123)//第三行

printf("缓态配\n")

f4(123)/扰指/第四行

printf("\闭宽n")

}

f3(123)是取余 依次为3,f(12)2,f(1)1,f(0)

最后返回头打印 所以是321

f(4)是if(n/10 != 0) f4(n/10)

一直在执行这个语句 所以if不满足时才执行printf("%d", n%10)

所以是和f(3)顺序相反输出

以下是使用递归算法实现上述程序的C语言代码:

#include <stdio.h>

float sum(int n) {

if (n == 0) { // 基本情况

return 0

} else {

float s = 0

for (int i = 1i <= ni++) { // 计算1/1+2+3+...+n

s += i

}

return sum(n-1) + 1/s // 递归调用

}

}

int main() {

int n

printf("请输入n的值:")

scanf("%d", &n)

printf("sum = %.2f\n", sum(n))

return 0

}

在这个递归函数中,我们使用嫌巧源了一个基本情况,即当n等于0时,返回0作为递归的终止条芹态件。在其他情况下,我们使用for循环计算1/1+2+3+...+n的值,然后通过递归宽察调用求解sum(n-1),最后将两个结果相加。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12519404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存