TAIL递归计算谐波级数?
TAIL recursion to calculate Harmonic Series?
我正在尝试使用 TAIL recrusion 计算谐波级数,简单的 recrusion 有效但不是终端版本,
这是简单的回收版本:
#include<stdio.h>
float calcul(int n)
{if(n==1)
return 1;
else
return (1/float(n)+(calcul(n-1)));
}
main()
{int i,n;float h,t;
t=1;
printf("type in a number :\n");
scanf("%d",&n);
printf("H(%d)= %.3f",n,calcul(n));}
这是 TAIL 回收,但它不起作用:
#include<stdio.h>
float calcul(int n,float t)
{if(n<2)
return 1;
else
return calcul(n-1,t+(float(1)/float(n)));
}
main()
{int n;
float t;
t=1.00;
printf("type in a number :\n");
scanf("%d",&n);
printf("H(%d)= %.3f",n,calcul(n,t));}
我用的是c
请帮助我:)
尾递归的重点是你所有的递归调用都在尾位置,你不是这样的(递归调用后还是要+)
通过在基本情况下 return 或在递归情况下更新的累加器来解决这个问题:
float calcul(int n) {
return calcul(n, 1);
}
float calcul(int n, float acc) {
if (n == 1)
return acc;
else
return calcul(n-1, acc + 1 / float(n));
}
我正在尝试使用 TAIL recrusion 计算谐波级数,简单的 recrusion 有效但不是终端版本, 这是简单的回收版本:
#include<stdio.h>
float calcul(int n)
{if(n==1)
return 1;
else
return (1/float(n)+(calcul(n-1)));
}
main()
{int i,n;float h,t;
t=1;
printf("type in a number :\n");
scanf("%d",&n);
printf("H(%d)= %.3f",n,calcul(n));}
这是 TAIL 回收,但它不起作用:
#include<stdio.h>
float calcul(int n,float t)
{if(n<2)
return 1;
else
return calcul(n-1,t+(float(1)/float(n)));
}
main()
{int n;
float t;
t=1.00;
printf("type in a number :\n");
scanf("%d",&n);
printf("H(%d)= %.3f",n,calcul(n,t));}
我用的是c 请帮助我:)
尾递归的重点是你所有的递归调用都在尾位置,你不是这样的(递归调用后还是要+)
通过在基本情况下 return 或在递归情况下更新的累加器来解决这个问题:
float calcul(int n) {
return calcul(n, 1);
}
float calcul(int n, float acc) {
if (n == 1)
return acc;
else
return calcul(n-1, acc + 1 / float(n));
}