突然想到用递归的思想写下小程序,当初刚学C的时候没理解到,现在作个记录:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/******************************************************************
* @brief: 输出程序的运行时间
* @param:
clock_t start: 起始时刻
clock_t end: 终止时刻
******************************************************************/
void runtime(clock_t start, clock_t end)
{
printf("time=%f seconds\n",(double)(end-start)/CLOCKS_PER_SEC);
}
// 递归求阶乘
float prod(float n)
{
if (n>1.0)
return (n*prod(n-1));
}
// 递归求和
float sumup(float n)
{
if (n>1.0)
return (n+sumup(n-1.0));
}
// 递归输出十进制转二进制
int dec2bin(int n)
{
char t;
int temp;
if (n>0)
{
temp=n/2;
t=(n%2) ? '1':'0';
dec2bin(temp);
putchar(t); // 注意这个显示的函数要放在递归函数后面,因为余数是倒过来输出的
}
return 0;
}
int main()
{
int num;
float n=1.0,s=0.0,p,t;
clock_t s0,s1;
s0=clock(); // 程序运行开始
while(n<101)
{
s=s+1.0/n;
n=n+1.0;
}
p=prod(6); //阶乘
t=sumup(100); //求和
printf("product(1×2×3×...×n) = %.0f\n",p);
printf("sum(1+2+3+...+n) = %.0f\n",t);
printf("sum(1+1/2+1/3+1/4+...+1/n) = %f\n",s);
putchar('\n');
putchar('\n');
printf("Please enter your number:");
scanf("%d",&num);
printf("The binary code of number \" %d \" is ",num);
putchar('\n');
dec2bin(num);
putchar('\n');
s1=clock(); //程序运行终止时间
runtime(s0,s1);
return 0;
}
程序是在Ubuntu16.04的CodeBlocks16.04上运行的,截图如下: