[英]Recursion in C: why does my simple code doesn't work?
給定i
的值 3,輸出應該是3/(3+1) + 2/(2+1) + 1/(1+1)
的總和,總是停在 1 上。
我似乎無法弄清楚我所做的事情有什么問題,謝謝您的關注。
#include <stdio.h>
#include <math.h>
int sum_recur(int i) {
if (i > 1) {
return sum_recur(i - 1) / (sum_recur(i - 1) + 1);
} else {
return 1;
}
}
int main(void) {
int i;
printf("Inform a number:\n");
scanf("%d", &i);
printf("%d \n", sum_recur(i));
}
我認為這將是您公式的正確遞歸實現
int sum_recur(int i){
if(i >= 1){
return (i / (i + 1)) + sum_recur(i-1);
} else{
return 0;
}
}
此外,正如@atirit 所提到的,您應該考慮將輸出設為float
或double
以保留除法結果的浮點值。 否則, sum_recur
的結果將始終為 0,因為對於整數類型, i / (i + 1)
始終為 0
#include <stdio.h>
#include <math.h>
float sum_recur(int i){
if(i >= 1){
return (i / (i + 1.0)) + sum_recur(i-1);
} else{
return 0;
}
}
int main(void){
int i;
printf("Inform a number:\n");
scanf("%d",&i);
printf("%f \n",sum_recur(i));
}
這是我相信您正在嘗試實現的內容,不需要遞歸,但如果您需要它,它就在那里:
#include <stdio.h>
double sum_recur(double i) {
if (i < 1) return 0;
return i / (i + 1) + sum_recur(i - 1);
}
double sum_iter(double i) {
double sum = 0;
for (; i >= 1; i--) {
sum += i / (i + 1);
}
return sum;
}
int main(void) {
int i;
printf("Inform a number:\n");
scanf("%d", &i);
printf("%f \n", sum_iter((double) i));
printf("%f \n", sum_recur((double) i));
}
總結是這樣的:
math
庫。printf
使用float
或double
而不是int
。我不明白你想通過這段代碼實現什么。 您編寫的代碼將始終返回 2。
sum_recur
將始終停在 1 處,您的 return 語句將計算 1/1+1,即始終為 2。對於輸入 3, sum_recur
將生成以下內容:
sum_recur
達到 1,因此為輸入值 2 返回 1
1/1 + 1 = 2,所以對於 i=2 sum_recur
將再次返回 2
這將對任何輸入數字進行。 這就是為什么無論輸入是什么,此遞歸的輸出始終為 2。此外,如果您在遞歸調用之間使用除法,則您期望此函數在問題陳述中執行的操作是不可能的。 您想要實現的結果只是 2 n 次的加法或 2 與 n 的乘法。
這里寫的答案很好地解釋了這個問題,我只是想在你的代碼中特別添加一點,當你做 f(i-1)/f(i-1)+1 時,這是一種很糟糕的方法,而且如果種子輸入較大,這可能會導致 stackoverflow 出現運行時問題。 所以我建議你應該嘗試一些更有效的方法,如果你必須使用回避。 像這樣通過存儲 fun 調用值
int n = f(i-1); 返回 n/n +1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.