使用递归/迭代思想完成n层嵌套平方根的计算
发布日期:2021-05-08 01:17:05 浏览次数:20 分类:精选文章

本文共 2036 字,大约阅读时间需要 6 分钟。

[程序代码(普通递归思想)]

#include
#include
/* 函数原型 */double f(double x, unsigned int n);/* */int main(){ double x; int n; printf("Please input x and n:"); scanf("%lf,%d", &x, &n); if(x >=0 && n >= 0) { printf( "Result=%.2lf\n", f(x, n)); } else { /* 数据非法 */ printf("data error!\n"); }}/* 计算 n层嵌套平方根 */double f(double x, unsigned int n){ if(n == 0) { /* 题目规定, 0层嵌套平方根的值为0 */ return 0; } else if(n == 1) { /* 递归的终止条件 */ return sqrt(x); } else { /* 递归的一般条件 */ return sqrt(x + f(x, n - 1)); }}

[运行结果] 

 


       另外也可以使用迭代思想解决该问题.

[程序代码(迭代思想)] 

#include
#include
/* 函数原型 */double f(double x, unsigned int n);/* */int main(){ double x; int n; printf("Please input x and n:"); scanf("%lf,%d", &x, &n); if(x >=0 && n >= 0) { printf( "Result=%.2lf\n", f(x, n)); } else { /* 数据非法 */ printf("data error!\n"); }}/* 计算 n层嵌套平方根 */double f(double x, unsigned int n){ if(n == 0) { /* 题目规定0层嵌套平方根的值为0 */ return 0; } /* */ double s = x; unsigned int j = 2; while(j <= n) { /* s变量负责实现迭代 */ s = x + sqrt(s); j ++; } /* 循环结束后, 最后要取其平方根做为返回值 */ s = sqrt(s); return s;}

[运行结果]


       最后还可以通过尾递归思路解决该问题.

[程序代码(尾递归思想)] 

#include
#include
/* 函数原型 */double f(double x, unsigned int n, double s);/* */int main(){ double x; int n; printf("Please input x and n:"); scanf("%lf,%d", &x, &n); if(x >=0 && n >= 0) { printf( "Result=%.2lf\n", f(x, n, x)); } else { /* 数据非法 */ printf("data error!\n"); }}/* 计算 n层嵌套平方根 */double f(double x, unsigned int n, double s){ if(n == 0) { /* 题目规定0层嵌套平方根的值为0 */ return 0; } else if(n == 1) { /* 递归的终止条件 */ return sqrt(s); } else { /* 递归的一般条件 */ /* 很容易通过迭代思路转化为尾递归思路 */ s = x + sqrt(s); return f(x, n - 1, s); }}

[运行结果]

上一篇:猴子吃桃
下一篇:以多种不同的思想实现1+2+...+n的求和

发表评论

最新留言

不错!
[***.144.177.141]2025年03月21日 22时21分46秒