2014-11-09 3 views
0
#include <stdio.h> 
int fun (int x) 
{ 
     if (x<1) 
     return(1); 
     else 
     printf("%d %d \n", x, fun(x-1)); 
} 
int main() 
{ int x,y; 
    x = 5; 
    y = fun(x); 
    printf("\n x = %d f(x) = %d \n", x, y); 
    return 0; 
    } 

Эта программа содержит рекурсивную функцию, которая подсчитывает некоторые числа. В выходе есть что-то, чего я не понимаю. Существует скриншот вывода по следующей ссылке:Пожалуйста, помогите мне с этой рекурсивной функцией?

https://onedrive.live.com/redir?resid=BE4862D617298D2C!886&authkey=!AA03bF8dQ5W4S9Y&v=3&ithint=photo%2cpng

Почему правая колонка (красный circuled) является, как показана? Я думал, что этот столбец будет все вместо этого.

ответ

2

Поскольку функция fun не имеет возвращаемое значение при х> = 1.

И 5 является возвращаемым значением printf("%d %d \n", x, fun(x-1));, поскольку она имеет выход 5 символов.

+0

Это чисто случайное, это неопределенное поведение. – 2501

+0

@ 2501 Это неопределенное, но не случайное совпадение. – hvd

+0

@ 2501 О да. Я просто заметил, что это случилось с выходом 5 символов, а возвращаемое значение printf равно 5 ...... Может быть, между ними есть какие-то отношения? На самом деле я не знал четко ... –

0

Вы ничего не возвращаете, если x>=1, вызывая неопределенное поведение, когда выполнение достигает конца функции. Это означает, что ценность может быть любой, у вас есть 5 случайно.

6.9.1. p12:

Если функция завершает выполнение функции, а значение вызова функции используется вызывающим, поведение не определено.

В вашем примере используется возвращаемое значение.

int fun(int x) 
{ 
    if (x<1) 
     return(1); 
    else 
     printf("%d %d \n", x, fun(x-1)); 

    return x ;//just return something 
} 

Возможно, вы захотите вернуть что-то важное, что вы делаете.

Смежные вопросы