C语言循环与递归实现整数幂函数

递归在C 关于递归中讲过了一些知识,但是在写的时候我还是遇到了一些麻烦,而普通的循环却比较好想。

先来看看普通的版本:

 代码如下 复制代码
#include <stdio.h>
double power(double n, double p);
int main(void)
{
 double n, p;
 printf("Please input the number you need to power: ");
 scanf("%lf", &n);
 printf("Please input the number of power:");
 scanf("%lf", &p);
 printf("The answer is %f", power(n, p));
 return 0;
}
double power(double n, double p)
{
 int i;
 double pow = 1.0;
 if (n == 0)
 pow = 0;
 if (p == 0)
 pow = 1;
 else if (p < 0)
 for (i = 1; i <= -p; i++)
 pow /= n;
 else if(p > 0)
 for (i = 1; i <= p; i++)
 pow *= n;
 return pow;
}

然后看看递归是怎么搞的:

 代码如下 复制代码
#include <stdio.h>
double power(double n, double p);
int main(void)
{
 double n, p;
 printf("Please input the number you need to power: ");
 scanf("%lf", &n);
 printf("Please input the number of power:");
 scanf("%lf", &p);
 printf("The answer is %f", power(n, p));
 return 0;
}
double power(double n, double p)
{
 if (n == 0)
 return 0;
 if (p == 0)
 return 1;
 else if (p > 0)
 return n * power(n, p - 1);
 else if (p < 0)
 return power(n, p + 1) / n ;
}

递归的代码行数更少,看着挺好的,但是思考的时候就感觉略有压力了,再次之前,我没有写过递归的函数,因为不会,这次努力的想了一下,发现递归是从根部开始思考的,因为是一个个函数排下去的,所以其实是从p==0开始运行的。return 1,然后一直运算到*n截止,这样思考就能得出答案了。

时间: 2024-09-25 22:49:09

C语言循环与递归实现整数幂函数的相关文章

c语言循环里的递归问题

问题描述 c语言循环里的递归问题 求大神们,帮我分析一下这个程序怎么运行的 #include void test(int n) { int x=0,i=0; if(n==1){ printf("n:%d x:%d i:%d ",n,x,i); return ; }else{ printf("n:%d x:%d i:%d ",n,x,i); for(i=0;i<3;i++){ test(n-1); x=1; } } } int main() { test(3);

编程-关于c语言循环嵌套的问题

问题描述 关于c语言循环嵌套的问题 完全数是其各因子之和正好等于本身的数,如6=1+2+3,28=1+2+4+7+14所以6,8都是完全数,请编程找出2-20000内的所有完全数.输入整数n,输出第n个完全平方数.第一种: #include <stdio.h> void main() { int ins=0k=0; scanf(""%d""&n); for(i=2;i<=20000;i++s=0) { for(int j=1;j<i;

编程-c语言循环语句问题 输出不了结果

问题描述 c语言循环语句问题 输出不了结果 完全数是其各因子之和正好等于本身的数,如6=1+2+3,28=1+2+4+7+14,所以6,8都是完全数,请编程找出2-20000内的所有完全数.输入整数n,输出第n个完全平方数. 我的程序无法输出结果不知为啥 #include <stdio.h> void main() { int i,n,s=0,k=0; scanf("%d",&n); for(i=2;i<=20000;i++,s=0) { for(int j=

一步一步写算法(之循环和递归)

原文:一步一步写算法(之循环和递归) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     其实编程的朋友知道,不管学什么语言,循环和递归是两个必须学习的内容.当然,如果循环还好理解一点,那么递归却没有那么简单.我们曾经对递归讳莫如深,但是我想告诉大家的是,递归其实没有那么可怕.所谓的递归就是函数自己调用自己而已,循环本质上也是一种递归.     1)求和递归函数     我们可以举一个循环的例子,前面我们说过,如果编写一个1到n的求和

C语言函数的递归和调用

C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己. 要点: 1.C语言函数可以递归调用. 2.可以通过直接或间接两种方式调用.目前只讨论直接递归调用. 二.递归条件 采用递归方法来解决问题,必须符合以下三个条件: 1.可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减. 说明:解决问题的方法相同,调用函数的参数每次不同(有规律的递增或递减),如果没有规律也就不能适用递归调用. 2.可以应用这个转

C语言函数的递归和调用实例分析

一个函数在它的函数体内调用它自身称为递归调用.这种函数称为递归函数.C语言允许函数的递归调用.在递归调用中,主调函数又是被调函数.执行递归函数将反复调用其自身,每调用一次就进入新的一层   一.基本内容: C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己. 要点: 1.C语言函数可以递归调用. 2.可以通过直接或间接两种方式调用.目前只讨论直接递归调用. 二.递归条件 采用递归方法来解决问题,必须符合以下三个条件: 1.可以把要解决的问题转化为一个新问题,而这个

c语言-C语言版非递归马踏棋盘·死循环了·求大神解答·小弟新手求助

问题描述 C语言版非递归马踏棋盘·死循环了·求大神解答·小弟新手求助 这是出现死循环的代码bool solution(Move move, Pos &beginPos){ if(!move) { printf("solution Failed!"); return false; } int chessBoard[8][8] = {0}; push(move, beginPos); chessBoard[beginPos.mX][beginPos.mY] = 1; int ste

c语言 循环-初学渣.关于C语言for循环的省略问题

问题描述 初学渣.关于C语言for循环的省略问题 int i=-2;for(;i++;);printf(""%d ""i)(节选,如上所示)最后输出的结果是多少,为什么?新人,求不喷... 解决方案 C语言初学关于for循环的自己的见解C语言for循环c语言循环-for 解决方案二: 本人同上,不知道你的循环条件的说 解决方案三: 你的for循环有问题for(;i++;)判断永远为真,会无限循环的因为i++为真,因改写为for(;i<....;i++) 解决方

c语言:如何把一个整数按位保存在一个字符数组里,然后再读取出来还原为一个整数

问题描述 c语言:如何把一个整数按位保存在一个字符数组里,然后再读取出来还原为一个整数 void WitedataToFlash(void) { unsigned char i; sprintf(datal, "%luunsignedlong", gdvolt); for(i=0;i<11;i++) EEPROM_write(0x01+i,datal[i]); } /*********************************************************