我的功能从用户输入一个数字,并递归地将数字“n”加到一个。
输入5将总和1/5 + 1/4 + 1/3 + 1/2 + 1/1。
#include<stdio.h>
#include<conio.h>
//to
float recursion(float num,float sum);
void main(void)
{
float num=5,sum=0;
//input num
printf("%d",recursion(num,sum));
getch();
}
float recursion(float num,float sum)
{
// int sum=0; every time u run it the sum is assigned 0
if( num==1)
return 1;
else
{
sum=sum+(1/num);
num--;
recursion(num,sum);
}
return sum;
}//recursion function ends
问题是,它给0:/任何人都可以帮忙吗?
答案 0 :(得分:5)
您应该返回递归调用的结果:
return recursion(num,sum);
而不是return sum
。
答案 1 :(得分:1)
为什么是printf("%d")
,而它应该打印浮动?不显示整数,使小于0的浮点数始终为0?
float recursion(float num)
{
if( num==1.0f)
{
printf("1/1 = ");
return 1.0f;
}
float inverse = 1.0f/num;
printf("1/%.0f + ", num);
return (inverse + recursion(--num));
}//recursion function ends
这是测试代码:
float num=5,sum=0;
float expected = 0;
for (int i = 1; i <= num; ++i)
{
expected += 1.0f/i;
}
//input num
printf("Expected %f and got %f",expected, recursion(num));
输出:
1/5 + 1/4 + 1/3 + 1/2 + 1/1 = Expected 2.283334 and got 2.283334
希望这有帮助。
答案 2 :(得分:0)
float recursion(float num) {
if( num==1)
return 1;
return (1.0/num) + recursion(num - 1);
}
顺便说一下,不要输入负数!
答案 3 :(得分:0)
@fahad:您的代码中的更改已在下面的代码中注释:
float recursion2(float num,float sum)
{
// int sum=0; every time u run it the sum is assigned 0
if( num==1)
// Vite Falcon: Needs to return sum + 1
return sum + 1.0f;
else
{
// Vite Falcon: This is not really necessary.
//sum=sum+(1/num);
float inverse = 1.0f/num;
num--;
// Vite Falcon: The new sum is returned by the recursive function and so
// should be stored and returned.
sum = recursion2(num,sum + inverse);
}
return sum;
}//recursion function ends
PS:抱歉,我不得不再次回答,因为我不知道如何添加多行代码作为评论。
答案 4 :(得分:-1)
使用sum=sum+(1.0/num);
。除以1,一个带浮点数的整数,浮点数首先转换为整数。
答案 5 :(得分:-1)
float recursion(int num) {
if (num == 0) {
return 0;
}
return 1 / num + recursion(num--);
}